簡體   English   中英

在SQL Server XML列中更新XML屬性

[英]Updating XML attribute in SQL Server XML column

我正在嘗試更新存儲在SQL Server XML列中的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值未更改@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 

這是我的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" -具有VouCode="Vouc002"的節點的Qty屬性更新為我之前在SQL變量中定義的值

更新:要插入新的<CampaignVoucher>條目,請使用XQuery如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM