我有两个xml变量:
@main xml = '<root></root>'
@insert xml = '<rows><row>SomeRow</row></rows>'
我想插入@insert行的子节点,以便我得到一个如下所示的结果XML:
<root>
<row>SomeRow</row>
</root>
我很清楚从sql变量中插入xml(使用sql:variable(“@ insert”)),但这会插入包含根元素的整个XML。我想要的是只在@insert变量中插入根元素的子节点。
非常感谢。
答案 0 :(得分:3)
一种方法是更改需要插入另一个xml的变量中的数据:
DECLARE @main xml = '<root></root>',
@insert xml = '<rows><row>SomeRow</row></rows>'
SELECT @insert = @insert.query('/rows/row')
SET @main.modify('
insert sql:variable("@insert")
into (/root)[1] ')
SELECT @main
输出:
<root>
<row>SomeRow</row>
</root>
答案 1 :(得分:0)
好的,本着结束这个的精神,我有一个技术上可以用来做我想要的单线的解决方法。它已被证明对我有效,并避免创建一个中间变量。但也只适用于主要的单级XML。
-- The same variables, I added '<tag>' to demonstrate the insert
DECLARE @main xml = '<root><tag>Some data Here</tag></root>'
DECLARE @insert xml = '<rows><row>SomeRow</row></rows>'
-- One-liner that inserts '@insert' into @main
SET @main = (
SELECT @main.query('/root/*'), @insert.query('/rows/*')
FOR XML RAW(''),ROOT('root'), ELEMENTS, TYPE
)
SELECT @main
输出:
<root>
<tag>Some data Here</tag>
<row>SomeRow</row>
</root>