0

我有一个具有多个“父”节点的 XML 值列。我需要在每个父节点中插入一个“子”节点。如果我使用

UPDATE mytable SET mycolumn.modify('insert <child/> into (//parent)[1]')

,然后我只将一个子节点插入第一个父节点。

如何通过单个查询在每个父母中插入一个孩子?

4

2 回答 2

0

我相信最简单的方法是使用 CROSS APPLY 和 FOR XML 使用 SELECT 语句重建 XML。

这是一个例子,希望它有意义。使用这种方法,您还可以将要插入<child2 />节点的数据加入到另一个表中,从而使该解决方案非常灵活。

DECLARE @t TABLE ( Document XML )
INSERT INTO @t
SELECT '<root><parent><child1>first row data</child1></parent><parent><child1>second row data</child1></parent></root>'

SELECT
    ref.value('child1[1]', 'varchar(max)') as child1, 
    'something to insert' as child2
FROM @t CROSS APPLY Document.nodes('//parent') R(ref)
FOR XML PATH('parent'), ROOT('root')

结果

<root>
  <parent>
    <child1>first row data</child1>
    <child2>something to insert</child2>
  </parent>
  <parent>
    <child1>second row data</child1>
    <child2>something to insert</child2>
  </parent>
</root>
于 2012-03-23T11:50:01.547 回答
0

我结束了向上移动一个级别(即获取所有父节点),计算替换的 XML,并使用“替换值”而不是“插入”

于 2012-03-24T12:40:23.627 回答