sql - 多次插入 XML 数据

标签 sql sql-server xml xquery sqlxml

我的表中有一个 XML 列。 XML 结构是这样的:

   <Nodes>
    <Node>
     <Name>a</Name>
    </Node>
    <Node>
     <Name>a</Name>
    </Node>
   </Nodes>

我正在尝试插入两个节点: 我试过这个:

  SET @xml.modify('       
    insert <Phone>111</Phone> 
   into (/Nodes/Node)[1]') 

但这只会在第一次出现时插入电话。

最佳答案

不幸的是,你不能更新xml内的多个节点,你可以使用循环:

select @i = @xml.value('count(Nodes/Node)', 'int')

while @i > 0
begin
   set @xml.modify('insert <Phone>111</Phone> into (/Nodes/Node)[sql:variable("@i")][1]') 

   set @i = @i - 1
end

select @xml

或者你可以像这样重建你的xml:

select
    111 as Phone,
    t.c.value('Name[1]', 'nvarchar(max)') as Name
from @xml.nodes('Nodes/Node') as t(c)
for xml path('Node'), root('Nodes')

sql fiddle demo

关于sql - 多次插入 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19110272/

相关文章:

sql-server - 使用 SQL Azure 进行哈希分片映射

mysql - 使用链接服务器将参数化动态查询从 SQL Server 传递到 MySQL 数据库时出现问题

c# - 检查两个 XML 文件在 C# 中是否相同?

xml - Wix MSI 仅适用于一台计算机

sql - 如果不存在则插入

mysql - 在 Mysql 中标记旧的重复项

php - 如何更改 MySQL 查询以临时更改列名

android - 在android中将字符串转换为xml文件

sql - 编写正确的 sql 查询时遇到问题

sql - 从序列sql中获取下一个值