2015-06-15 18 views
0

从我的ASP.Net应用程序我生成XML,并把它作为输入数据如下存储过程,使用更新SQL Server表的XML数据

<Aprroval> 
    <Approve> 
    <is_nb_approved>false</is_nb_approved> 
    <is_approved>true</is_approved> 
    <is_submitted>true</is_submitted> 
    <UserId>35</UserId> 
    <ClientId>405</ClientId> 
    <taskDate>2015-05-23T00:00:00</taskDate> 
    </Approve> 
    <Approve> 
    <is_nb_approved>false</is_nb_approved> 
    <is_approved>true</is_approved> 
    <is_submitted>true</is_submitted> 
    <UserId>35</UserId> 
    <ClientId>405</ClientId> 
    <taskDate>2015-05-24T00:00:00</taskDate> 
    </Approve> 
</Approval> 

,下面将我的存储过程,

create procedure UpdateTaskStatus(@XMLdata XML) 
    AS 

UPDATE [TT_TaskDetail] 
SET 
    is_approved=Row.t.value('(is_approved/text())[1]','bit'), 
    is_nb_approved=Row.t.value('(is_nb_approved/text())[1]','bit'), 
    is_submitted=Row.t.value('(is_submitted/text())[1]','bit') 
FROM @XMLdata.nodes('/Aprroval/Aprrove') as Row(t) 
WHERE user_id = Row.t.value('(UserId/text())[1]','int') 
    AND client_id = Row.t.value('(ClientId/text())[1]','int') 
    AND taskdate = Row.t.value('(taskDate/text())[1]','date') 

但是,当我执行此存储过程时,我得到的返回值为0并且没有记录正在更新。欢迎任何建议。

+0

你尝试只是从XML选择? –

+0

是的,没有返回任何东西 – Sangeetha

回答

1

您在xml中遇到2错误:

首先是不匹配的根标记。

其次,更重要的是,您在查询nodes('/Aprroval/Aprrove'),但内标签为Approve而不是Aprrove

小提琴http://sqlfiddle.com/#!3/66b08/3

1

您的外部标签不匹配。您的开标签上写着“Aprroval”,而不是“批准”。一旦我纠正了这一问题,我就可以毫无问题地从XML中进行选择。