如何在SQL Server表的XML字段中修改XML属性



我正在尝试使用

在SQL Server表中更新XML列
XML.modify replace value of (XML DML)

在以下XML示例中,有没有一种方法可以将所有vendorId用值1替换为另一个值?从http://technet.microsoft.com/en-us/library/ms190675.aspx中的文档中,我似乎需要为此指定记录索引。但是就我而言,XML内将有多个记录,我不知道它会加入的顺序。

<LineItems>
  <LineItem productId="48" invId="1573" quantity="1" id="1" vendorId="1022" price="1350.0000" cost="450.0000" discount="0" acqu="2" />
  <LineItem productId="1" invId="0" quantity="1" id="2" vendorId="1" price="400" cost="0" discount="0" />
  <LineItem productId="46" invId="1574" quantity="1" id="3" vendorId="1022" price="789.0000" cost="263.0000" discount="0" acqu="4" />
  <LineItem productId="1" invId="0" quantity="1" id="4" vendorId="1" price="300" cost="0" discount="0" />
</LineItems>

请建议。

谢谢!

您必须使用循环并一次更新一个值。

while @XML.exist('/LineItems/LineItem[@vendorId = "1"]') = 1
  set @XML.modify('replace value of (/LineItems/LineItem[@vendorId = "1"]/@vendorId)[1] with "2"' )

sql小提琴

更新表中XML列的版本看起来像这样。

while exists(
            select * from T
            where T.XMLColumn.exist('/LineItems/LineItem[@vendorId = "1"]') = 1
                  --and [some other condition]
            )
begin
  update T
  set XMLColumn.modify('replace value of (/LineItems/LineItem[@vendorId = "1"]/@vendorId)[1] with "2"')
  where T.XMLColumn.exist('/LineItems/LineItem[@vendorId = "1"]') = 1
        --and [some other condition]
end

SQL小提琴

如果您需要将常数字符串替换为另一个字符串,我建议您使用REPLACE功能并在字符串上进行完整。

DECLARE @XML XML /*your xml value*/
SELECT REPLACE(CONVERT(NVARCHAR(MAX),@XML),'vendor="1"','"vendor="2"')

在许多情况下,它要容易得多,然后以XML风格进行。

相关内容

  • 没有找到相关文章

最新更新