gru*_*ber 3 sql t-sql xquery sql-server-2005 xml-dml
在我的表中,我有一个包含XML数据的列.
例如,假设架构如下:
<person>
<id></id>
<name></name>
</person>
Run Code Online (Sandbox Code Playgroud)
问题是这些节点中的一些节点有额外的节点 <lastname>
现在,我想更新此列中的所有元素,以便每个元素都lastname具有默认值的节点smith.
尝试这样的事情:
UPDATE
dbo.YourTable
SET
XmlColumn.modify('insert <lastname>Smith</lastname> as last into (/person)[1]')
WHERE
XmlColumn.exist('/person/lastname') = 0
Run Code Online (Sandbox Code Playgroud)
这会更新内部不存在<lastname>节点的所有行,并插入这些XML值.<person><lastname>Smith</lastname>
更新:如果要选择某些名称,请使用以下查询:
UPDATE
dbo.YourTable
SET
XmlColumn.modify('insert <lastname>Smith</lastname> as last into (/person)[1]')
WHERE
XmlColumn.exist('/person[name="John"]') = 1
Run Code Online (Sandbox Code Playgroud)
更新#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
Run Code Online (Sandbox Code Playgroud)
如果你运行它(在SQL Server 2008或更高版本上),你将得到:
1 <person><id>1</id><name>John</name></person>
Run Code Online (Sandbox Code Playgroud)
作为输出; 选择标准是测试值为的XML元素 <name>John
| 归档时间: |
|
| 查看次数: |
1180 次 |
| 最近记录: |