如何在 T-SQL 中的节点列表上调用 modify()?

Jef*_*der 4 xml sql-server

我有一个流程步骤,我在 SQL Server 列中有一个 XML 文档,我需要更改可能多次出现的节点的文本。Modify() with 'replace' DML 仅在单个节点上运行。更复杂的是,需要根据本地维护的查找表进行替换。

我可以使用 nodes() 来获取节点列表并设计一个查询以适当地连接数据,但在那时,我不再有 modify() 可以对其进行操作的引用。

看来我唯一的选择是创建一个 CLR 过程或函数并使用某种 dotnet 本机 XML 迭代。这不太吸引人,因为业务逻辑将被锁定在源代码中,在过程定义中不可见。有什么办法可以专门使用 XML 方法进行这种转换吗?

Mik*_*son 6

我想到了三个选项。

使用 while 循环并一次修改一个节点

使用 nodes() 粉碎 XML,修改值,然后使用 for xml 重建。

将 XML 转换为字符串并使用 replace()。

最适合您的情况取决于 XML 的形状以及您需要进行的修改类型。如果您将带有示例数据和预期输出的表结构添加到问题中,您可能会得到更好的答案。