[英]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.