首页 > 解决方案 > SQL Server xml 变量不是通过引用

问题描述

以下查询应将节点附加到现有 xml。基于输出 xml 变量实际上是新节点,而不是现有节点的引用。我可以使用参考变量吗?请告知:

declare @a_bo_key_xml xml='<r><items><item><key>k1</key><value>v1</value></item></items></r>'
Declare @rowsBOK xml=@a_bo_key_xml.query('/r/items/item')
select  @rowsBOK.value('(*/key)[1]','varchar(100)'), @rowsBOK.value('(*/value)[1]','varchar(100)')
set @rowsBOK.modify('insert <added>aaa</added> as first into (*)[1]') 
select cast(@a_bo_key_xml as varchar(max))
select cast(@rowsBOK  as varchar(max))
output:
<r><items><item><key>k1</key><value>v1</value></item></items></r>
<item><added>aaa</added><key>k1</key><value>v1</value></item>
expected:
<r><items><item><added>aaa</added><key>k1</key><value>v1</value></item></items></r>
<item><added>aaa</added><key>k1</key><value>v1</value></item>

标签: sqlsql-serverxmlvariablesreference

解决方案


XML 变量在重新分配时采用新的标识,两者之间没有联系。

直接修改@a_bo_key_xml变量即可:

declare @a_bo_key_xml xml='<r><items><item><key>k1</key><value>v1</value></item></items></r>';
set @a_bo_key_xml.modify('insert <added>aaa</added> as first into (/r/items/item)[1]');
select @a_bo_key_xml;

db<>小提琴


推荐阅读