【发布时间】:2011-11-15 19:01:52
【问题描述】:
假设我有一个带有 XML 列的数据库表。
对于每一行,XML 的结构相同(或相似),但标签的内容不同。
结构看起来像这样:
<Parent1>
<Parent2>
<Child>
test 1
</Child>
</Parent2>
<Parent2>
<Child>
test 2
</Child>
</Parent2>
</Parent1>
我想对结构中的每个“子”节点进行一些处理,并用结果更新它们。
例如,我想将单词“test”替换为单词“something”。
所以我不希望两个子节点最终都包含“something 1”。
相反,我希望第一个子节点包含“something 1”,第二个子节点包含“something 2”。
我可以编写以下代码,以一次定位一个单个节点:
DECLARE @replacement NVARCHAR(4000) = 'something 1'
UPDATE MyTable
SET MyXMLField.modify('replace value of (Parent1[1]/Parent2[1]/Child[1]/text())[1] with sql:variable("@replacement")')
WHERE Id = 1
但是是否可以编写一个 T-SQL 语句来处理 多个 节点,由 XPath 匹配,并根据例如函数的结果单独更新每个节点?
【问题讨论】: