繁体   English   中英

在SQL Server XML列中更改XML属性值

[英]Change XML attribute values in SQL Server XML column

我有一个如下的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

但是结果相同-消息显示查询已成功执行,但没有任何改变。

任何帮助表示赞赏。

您有几个问题:

  1. 您完全忽略了所讨论的XML文档中的XML名称空间 (在原始UPDATE
  2. 您使用不完整的XPath表达式进行修改

尝试以下语句:

;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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM