sql-server - 如何在sql server中的所有节点中添加XML节点

标签 sql-server xml sql-server-2008

我在 sql 数据库中有一个 XML 类型的列。我想在名为 GoodsSerial 的所有节点中添加一个具有相同值的新节点 EFDRow

<Serials>
  <GoodsSerial>
    <GSerialSCredit>2015/08/11</GSerialSCredit>
    <GSerialECredit>2015/08/11</GSerialECredit>
    <GSerialStart>1</GSerialStart>
    <GSerialEnd>5</GSerialEnd>
  </GoodsSerial>
  <GoodsSerial>
    <GSerialSCredit>2015/08/11</GSerialSCredit>
    <GSerialECredit>2015/08/11</GSerialECredit>
    <GSerialStart>10</GSerialStart>
    <GSerialEnd>15</GSerialEnd>
  </GoodsSerial>
</Serials>

我已经尝试过这段代码

UPDATE Tbl
SET SerialXml.modify('insert <EFDRow>{sql:column("EFDRow")}</EFDRow> into (/Serials/GoodsSerial)[1]')

但它仅将 EFDRow 节点添加到第一个 GoodsSerial 节点。

最佳答案

您可以粉碎您的 XML /Serials/GoodsSerial 并使用 xml 路径 添加的 EFDRow 值重建它。

update dbo.Tbl
set SerialXml = (
                select GS.X.query('*'),
                       EFDRow
                from SerialXml.nodes('/Serials/GoodsSerial') as GS(X)
                for xml path('GoodsSerial'), root('Serials'), type
                );

GS.X.query('*') 将为您提供 GoodsSerial 中已存在的所有节点。

SQL Fiddle

关于sql-server - 如何在sql server中的所有节点中添加XML节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31936159/

相关文章:

java - 如何将 onclicklistener 用于 GridView

sql - FAST_FORWARD 游标何时会有工作表(这是要避免的事情)?

sql - 如何获取存储过程参数详细信息?

sql-server - 忽略 SSIS 的 OLE DB 目标中的重复记录

xml - 使用 XMLReader 的 F# XML 解析

sql-server-2008 - SSRS 使用基于多个过程的条件求和?

xml - 查询 xml 列的一部分作为结果集

SQL 格式化标准

mysql - 'IN' 关键字附近的语法错误

xml - 在 Silverlight 中显示 ® 符号