SQL Server xml 变量不是通过引用
Posted
技术标签:
【中文标题】SQL Server xml 变量不是通过引用【英文标题】:SQL Server xml variable is not by reference 【发布时间】:2021-11-16 01:48:12 【问题描述】:以下查询应将节点附加到现有 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>
【问题讨论】:
【参考方案1】: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<>fiddle
【讨论】:
谢谢,我一直怀疑使用整个 xml 效率较低 不,它不是这样工作的。在内部,它由可以有效查找的 ID 表示。复制肯定更慢以上是关于SQL Server xml 变量不是通过引用的主要内容,如果未能解决你的问题,请参考以下文章
请问在SQLserver 中如何指定一个数据库类型的变量?就是说里面引用的表前的数据库前缀可以像变量一样改变
SQL server2008安装失败原因“未将实例引用设置为实例对象”怎样解决啊?