我正在尝试使用SQL查询中的XML DML修改XML数据库字段中的节点值。
假设我的表字段有xml,如下所示: -
<ContentTree>
<ContentObject>
<Id>1</Id>
<Order>999</Order>
</ContentObject>
<ContentObject >
<Id>5</Id>
<Order>999</Order>
</ContentObject>
<ContentObject >
<Id>3</Id>
<Order>999</Order>
</ContentObject>
</ContentTree>
有没有办法在SQL查询中使用XML DML来根据Id值修改Order值,例如: 类似的东西: -
If /ContentTree/ContentObject/Id /text()[1] ="5"
Then
Replace value of /ContentTree/ContentObject/Order/text()[1]
with ("2")
我的实际数据很长,并且计算ContentObjects的索引号并不容易,因此我不想通过其ContentObject索引号来识别特定的Order节点。
非常感谢。
答案 0 :(得分:0)
以下是我的例子:
DECLARE @table TABLE (value XML)
INSERT INTO @table
(
[value]
)
VALUES
(
N'<ContentTree>
<ContentObject>
<Id>1</Id>
<Order>999</Order>
</ContentObject>
<ContentObject>
<Id>5</Id>
<Order>999</Order>
</ContentObject>
<ContentObject >
<Id>3</Id>
<Order>999</Order>
</ContentObject>
</ContentTree>'
)
UPDATE @table
SET
[value].modify('replace value of (/ContentTree/ContentObject/Id[text()="5"]/../Order/text())[1] with "5"')
SELECT *
FROM @table t