使用XML数据更新SQL Server表

时间:2015-06-15 19:16:17

标签: sql-server xml

从我的ASP.Net应用程序中,我生成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并且没有记录得到更新。欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

xml中有2个错误:

首先是不匹配的根标签。

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

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