2011-10-22 97 views
1

我正在嘗試更新存儲在SQL Server XML列中的XML的節點Qty,但沒有發生錯誤,但我的字段沒有更新。正在更新SQL Server XML節點

請指教。謝謝。

從SQL Server XML列複製的XML數據:

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

存儲過程:

USE [c1] 
GO 
/****** Object: StoredProcedure [dbo].[Campaign_InsertRewardsVoucher] Script Date: 10/22/2011 23:33:35 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
/* 
*/ 
ALTER PROCEDURE [dbo].[Campaign_InsertRewardsVoucher] 

    @voucherXML   XML, -- @voucherXML is the XML pass from my SQL server 

AS 
BEGIN 

declare @changedVal int 
set @changedVal = 4 

UPDATE [Customers] 
SET voucherXML.modify('replace value of (/CampaignVoucher/Qty/text())[1] with "0"') 
WHERE voucherXML.value('(/CampaignVoucher/Qty)[1]', 'int') = @changedVal 


END 

回答

2

你忽略根級別節點<ArrayOfCampaignVoucher> - 試試這個:

UPDATE 
    dbo.[Customers] 
SET 
    voucherXML.modify('replace value of (/ArrayOfCampaignVoucher/CampaignVoucher/Qty/text())[1] with "0"') 
WHERE 
    voucherXML.value('(/ArrayOfCampaignVoucher/CampaignVoucher/Qty)[1]', 'int') = @changedVal 
+0

感謝您的電梯! – k80sg

0

或者,您可以執行以下操作,假定SQL Server支持後代或自我軸以及assu明認爲數量沒有其他的祖先:

UPDATE DBO [客戶] SET voucherXML.modify( '取代的(//數量/文本())[1]用 「0」 值') WHERE
voucherXML.value(「(//數量)[1]」,「廉政」)= @changedVal

但好像你每陣多個CampaignVoucher節點,你不會想批發替換具有新值的值的第一個實例。相反,你不想限制更新到具有特定VouCode的憑證嗎?