SQL中的XML列的多个节点插入

时间:2012-03-23 11:39:16

标签: xml tsql sqlxml

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

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

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

如何使用单个查询在每个父级中插入子级?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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