[英]XML query/modify problem in SQL server 2008 r2
我對 SQL 相當陌生,我正在嘗試過濾和更改包含已購買訂單的 XML 文檔的列內的值。 這是 XML 文檔的外觀和我正在搜索的示例。
<TenderLines>
<TenderLineItem>
<tenderTypeId>S0001-00000001</tenderTypeId>
..
..
</TenderLineItem>
<TenderLines>
我有 6000 多行,但並非所有行都具有相同的tenderTypeId。 我想過濾掉tenderTypeId中具有'S0001-00000001'的值並將它們更改為'2'
到目前為止,這就是我想出的。
USE LSPOS80
DECLARE @replacement as varchar(50)
DECLARE @redundant as varchar(50)
SET @replacement = '2'
SET @redundant = 'S0001-00000001'
Update dbo.POSISTRANSACTIONTABLE
SET TRANSACTIONXML.modify
('replace value of(/RetailTransaction/TenderLines/TenderLineItem/tenderTypeId/@redundant) [1] with sql:variable("@replacement")')
查詢已成功執行,但沒有任何變化,我想知道你們中的任何人是否可以閱讀此內容並可能給我提示。
感謝您抽出寶貴時間,向您致以最誠摯的問候,瓦爾迪。
PS 我正在使用 Microsoft SQL Server 2008 R2 - Express Edition
update dbo.POSISTRANSACTIONTABLE set
TRANSACTIONXML.modify('replace value of (/TenderLines/TenderLineItem/tenderTypeId/text())[1] with (sql:variable("@replacement"))')
where XMLCol.exist('/TenderLines/TenderLineItem/tenderTypeId[. = sql:variable("@redundant")]') = 1
要測試的東西:
declare @T table(XMLCol xml)
insert into @T values
('<TenderLines>
<TenderLineItem>
<tenderTypeId>S0001-00000001</tenderTypeId>
</TenderLineItem>
</TenderLines>'),
('<TenderLines>
<TenderLineItem>
<tenderTypeId>S0003-00000003</tenderTypeId>
</TenderLineItem>
</TenderLines>')
DECLARE @replacement as varchar(50)
DECLARE @redundant as varchar(50)
SET @replacement = '2'
SET @redundant = 'S0001-00000001'
update @T set
XMLCol.modify('replace value of (/TenderLines/TenderLineItem/tenderTypeId/text())[1] with (sql:variable("@replacement"))')
where XMLCol.exist('/TenderLines/TenderLineItem/tenderTypeId[. = sql:variable("@redundant")]') = 1
select *
from @T
請注意,這只會替換 XML 中每一行的一個tenderTypeId 值。 如果您在 xml(在一行中)中有多個tenderTypeId,並且您想要替換它們,您需要將更新語句放在一個while
循環中並替換只要where XMLCol.exist('/TenderLines/TenderLineItem/tenderTypeId[. = sql:variable("@redundant")]') = 1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.