在我的表中,我有一列包含XML
数据。
例如,假设架构如下:
<person>
<id></id>
<name></name>
</person>
问题是其中一些节点有额外的节点<lastname>
现在我想更新此列中的所有元素,以便每个元素都有lastname
具有默认值的节点,例如smith
.
在我的表中,我有一列包含XML
数据。
例如,假设架构如下:
<person>
<id></id>
<name></name>
</person>
问题是其中一些节点有额外的节点<lastname>
现在我想更新此列中的所有元素,以便每个元素都有lastname
具有默认值的节点,例如smith
.
尝试这样的事情:
UPDATE
dbo.YourTable
SET
XmlColumn.modify('insert <lastname>Smith</lastname> as last into (/person)[1]')
WHERE
XmlColumn.exist('/person/lastname') = 0
<lastname>
这将更新节点不存在的所有行<person>
,并插入<lastname>Smith</lastname>
到这些 XML 值中。
更新:如果您想选择某些名称,请使用此查询:
UPDATE
dbo.YourTable
SET
XmlColumn.modify('insert <lastname>Smith</lastname> as last into (/person)[1]')
WHERE
XmlColumn.exist('/person[name="John"]') = 1
更新 #2:为了证明我的查询是正确的 - 在这里尝试这个小测试:
DECLARE @test TABLE (ID INT, XmlCol XML)
INSERT INTO @test
VALUES(1, '<person><id>1</id><name>John</name></person>'),
(2, '<person name="John"><id>2</id><name>Fred</name></person>'),
(3, '<person><id>3</id><name>Wally</name></person>')
SELECT *
FROM @test
WHERE XmlCol.exist('/person[name="John"]') = 1
如果您运行它(在 SQL Server 2008 或更高版本上),您将获得:
1 <person><id>1</id><name>John</name></person>
作为输出;选择标准是对具有值的XML 元素进行测试 <name>
John
看看这个链接:
http://msdn.microsoft.com/en-us/library/ms345117%28SQL.90%29.aspx
在那里你可以找到这个:
UPDATE docs SET xCol.modify('
insert
<section num="2">
<title>Background</title>
</section>
after (/doc//section[@num=1])[1]')
高温高压