k80*_*0sg 2 xml sql sql-server 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 voucherXML.value('(/ArrayOfCampaignVoucher/CampaignVoucher/VouCode)[1]', 'nvarchar(50)') = @VoucherCode
Run Code Online (Sandbox Code Playgroud)
我尝试改变这样的语句,但没有运气,没有错误,但QTY值不会改变值@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
Run Code Online (Sandbox Code Playgroud)
这就是我的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>
Run Code Online (Sandbox Code Playgroud)
你应该使用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") ')
Run Code Online (Sandbox Code Playgroud)
这对我有用 - Qty节点的属性VouCode="Vouc002"更新为我之前在SQL变量中定义的值
更新:要插入新<CampaignVoucher>条目,请使用如下所示的XQuery:
UPDATE dbo.Customers
SET voucherXML.modify('insert <CampaignVoucher VouCode="Vouc003" Qty="42" />
as last into (/ArrayOfCampaignVoucher)[1]')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11026 次 |
| 最近记录: |