我有一个SQL Server数据库表,如下所示: -
Id (int) Info(xml)
------------------------
1 <xml....
2 <xml ...
3 <xml ...
“信息”字段中每条记录中的XML类似于: -
<CodesParameter xmlns="http://mynamespace.com/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Data Code="A1" HasMoreData="true">
.
.
</Data>
</CodesParameter>
我希望能够在XML中更改<Data Code="...">
的值并尝试以下查询: -
UPDATE MyTable
SET Info.modify('replace value of (Data[1]/@Code)with ("B1")')
WHERE Id = 2
Go
消息回显示查询已成功执行,但值不会更改。
我尝试过声明命名空间: -
UPDATE MyTable
SET Info.modify('declare namespace myns="http://mynamespace.com/";
replace value of (/myns:WebTableParameter[1]/myns:DataTable[1]/@Code)with ("B1")')
WHERE Id = 2
Go
但结果相同 - 消息显示查询已成功执行,但没有任何更改。
任何帮助表示感谢。
答案 0 :(得分:1)
你有几个问题:
UPDATE
)试试这句话:
;WITH XMLNamespaces(DEFAULT 'http://mynamespace.com/')
UPDATE dbo.MyTable
SET Info.modify('replace value of (/CodesParameter/Data[1]/@Code)[1] with ("B1")')
WHERE Id = 1
基本上,您需要从XML文档的根开始 - 您完全错过(或遗漏)<CodesParameter>
节点。另外:您需要选择一个属性 - 因此在括号后需要另一个[1]
。
通过这个声明,我能够根据需要更新XML。