更新给定属性的SQL XML Field节点值

时间:2015-07-30 18:40:31

标签: sql-server xml

我有一个表格,格式如下:

int IndexField
xml ConfigField

ConfigField字段值可能类似于

 <Parameters>
      <Parameter Type="Config" Name="Prefix">hd</Parameter>
      <Parameter Type="Config" Name="PgNumber">2</Parameter>
      <Parameter Type="Config" Name="IsValid">False</Parameter>
    </Parameters>

我想知道修改参数XML节点的SQL Server语法,PgNumber值从2到3 where IndexField = 22

由于

2 个答案:

答案 0 :(得分:1)

您可以使用函数modify()并更正XQuery来设置所需的值。但语法非常棘手。在您的情况下,您应该能够使用此类查询:

UPDATE YourTableName
SET ConfigField.modify('replace value of (/Parameters/Pararameter[@Name="PgNumber"]/text())[1] with "3"')
WHERE IndexField = 22

答案 1 :(得分:1)

这是一个可能的XQuery表达式,要传递给SQL Server的modify()方法来更新<Parameter Name='PgNumber'>元素的值:

UPDATE MyTable
SET ConfigField.modify('
        replace value of 
            (/Parameters/Parameter[@Name="PgNumber"]/text())[1] 
        with 3
    ')
WHERE IndexField = 22

<强> Sqlfiddle Demo

请注意,在XPath / XQuery中,您需要将@放在属性名称的开头,以引用XML属性。