正在更新SQL Server XML列中的XML属性

正在更新SQL Server XML列中的XML属性,sql,sql-server,xml,xquery-sql,Sql,Sql Server,Xml,Xquery Sql,我正在尝试更新我的XML中的一个节点,该节点存储在SQL Server XML列中。如果我的XML在XML元素中,下面的行可以工作,但现在我需要将其更改为XML属性,显然,更改后该行变为无效 适用于XMLElement: UPDATE [Customers] SET voucherXML.modify('replace value of (/ArrayOfCampaignVoucher/CampaignVoucher/Qty/text())[1] with "50"') WHERE v

我正在尝试更新我的XML中的一个节点,该节点存储在SQL Server XML列中。如果我的XML在XML元素中,下面的行可以工作,但现在我需要将其更改为XML属性,显然,更改后该行变为无效

适用于XMLElement:

UPDATE  [Customers] 
SET  voucherXML.modify('replace value of (/ArrayOfCampaignVoucher/CampaignVoucher/Qty/text())[1] with "50"') 
WHERE  voucherXML.value('(/ArrayOfCampaignVoucher/CampaignVoucher/VouCode)[1]', 'nvarchar(50)') = @VoucherCode 
我试图像这样更改语句,但没有运气,没有错误,但是
QTY
values无法更改
@NewQuantity
的值:

UPDATE [Customers]  
       SET voucherXML='<ArrayOfCampaignVoucher xmlns:xsd="http://www.w3.org/2001/XMLSchema" Qty="' + CAST(@NewQuantity AS NVARCHAR(16)) + '" />'  
   WHERE voucherXML.value('(/CampaignVoucher/VouCode)[1]', 'nvarchar(50)') = @VoucherCode 
更新[客户]
设置voucherXML=''
其中voucherXML.value(“(/campaign凭单/VouCode)[1]”,“nvarchar(50)”=@VoucherCode
以下是我的XML在SQL Server XML列中的外观:

<ArrayOfCampaignVoucher xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <CampaignVoucher VouCode="Vouc001" Qty="16" />
  <CampaignVoucher VouCode="Vouc002" Qty="18" />
  <CampaignVoucher xsi:nil="true" />
</ArrayOfCampaignVoucher>

您应该使用XQuery函数,而不是像这样将XML串在一起

请尝试以下方法:

DECLARE @newquantity INT = 55

UPDATE dbo.Customers
SET voucherXML.modify('replace value of (/ArrayOfCampaignVoucher/CampaignVoucher[@VouCode="Vouc002"]/@Qty)[1] with sql:variable("@NewQuantity") ')
这对我很有用-带有
VouCode=“Vouc002”
的节点的
Qty
属性更新为我之前在SQL变量中定义的值

更新:要插入新的
条目,请使用类似以下内容的XQuery:

UPDATE dbo.Customers
SET voucherXML.modify('insert <CampaignVoucher VouCode="Vouc003" Qty="42" /> 
                       as last into (/ArrayOfCampaignVoucher)[1]')
更新dbo.Customers
SET voucherXML.modify('插入
最后进入(/ArrayOfCampaignVoucher)[1]')

删除了
asp.net
c#
vb.net
标记-与这些技术中的任何一种都无关,真的..感谢您的帮助,请您提供一个插入新属性的示例:添加另一行VouCode和数量,以及删除基于VouCode的属性。我正试图寻找这方面的教程,但运气不好。谢谢@user415795:在“15秒”上查看这个由三部分组成的系列: