我在sql数据库中有一个XML类型的列。我想在名称为EFDRow
的所有节点中添加具有相同值的新节点GoodsSerial
。
<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节点。
答案 0 :(得分:2)
您可以粉碎XML /Serials/GoodsSerial
,并使用EFDRow
添加for xml path
的值重建它。
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
中已存在的所有节点。
答案 1 :(得分:0)
修改一次只能替换1个值。 您必须遍历所有节点: