Sql server 将SQL xml变量中的子节点插入到另一个xml变量中

Sql server 将SQL xml变量中的子节点插入到另一个xml变量中,sql-server,xquery,nodes,Sql Server,Xquery,Nodes,我有两个xml变量: @main xml = '<root></root>' @insert xml = '<rows><row>SomeRow</row></rows>' @main xml='' @插入xml='SomeRow' 我想插入@insert rows的子节点,这样我就得到了一个如下所示的结果XML: <root> <row>SomeRow</row> </r

我有两个xml变量:

@main xml = '<root></root>'
@insert xml = '<rows><row>SomeRow</row></rows>'
@main xml=''
@插入xml='SomeRow'
我想插入@insert rows的子节点,这样我就得到了一个如下所示的结果XML:

<root>
   <row>SomeRow</row>
</root>

萨默罗
我很清楚从sql变量中插入xml(使用sql:variable(“@insert”)),但这会插入整个xml,包括根元素。我只想在@insert变量中插入根元素的子节点


非常感谢。

一种方法是更改需要插入到另一个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 
DECLARE@main xml='',
@插入xml='SomeRow'
选择@insert=@insert.query('/rows/row')
设置@main.modify('
insert sql:变量(“@insert”)
进入(/root)[1]')
选择@main
输出:

<root>
  <row>SomeRow</row>
</root>
<root>
  <tag>Some data Here</tag>
  <row>SomeRow</row>
</root>

萨默罗

好的,本着结束这篇文章的精神,我有一个解决方案,从技术上讲,它是一个单行程序,可以用来做我想做的事情。事实证明,它对我很有效,并且避免了创建中间变量。但也仅适用于主要为单级的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
——同样的变量,我添加了“”来演示插入
声明@main xml='Some data Here'
声明@insert xml='SomeRow'
--将“@insert”插入@main”的一个衬垫
设置@main=(
选择@main.query('/root/*')、@insert.query('/rows/*'))
对于XML原始(“”),根(“”),元素,键入
)
选择@main
输出:

<root>
  <row>SomeRow</row>
</root>
<root>
  <tag>Some data Here</tag>
  <row>SomeRow</row>
</root>

这里有一些数据
萨默罗

谢谢gofr1,你是对的,这是我通常做的,但我想看看是否有一些语法允许它在一次fowel swoop中发生!