Sql server 将SQL xml变量中的子节点插入到另一个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
@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中发生!