Sql server 更新到XML列

Sql server 更新到XML列,sql-server,xml,tsql,xquery,Sql Server,Xml,Tsql,Xquery,正在尝试在SQL上更新customers表中销售经理的XML列 列的格式和名称如下: <CustomColumnsCollection> <CustomColumn> <Name>ReceiveRebate</Name> <DataType>5</DataType> <Value>False</Value> </CustomColumn>

正在尝试在SQL上更新customers表中销售经理的XML列

列的格式和名称如下:

<CustomColumnsCollection>
   <CustomColumn>
      <Name>ReceiveRebate</Name>
      <DataType>5</DataType>
      <Value>False</Value>
   </CustomColumn>
   <CustomColumn>
      <Name>Sales Manager</Name>
      <DataType>0</DataType>
      <Value>Ben Dover</Value>
   </CustomColumn>
   <CustomColumn>
      <Name>SurveyDate</Name>
      <DataType>1</DataType>
      <Value />
   </CustomColumn>
</CustomColumnsCollection>
它运行成功,但它似乎什么也没做,任何线索都会非常有用

以下是如何做到这一点

1 XPath表达式已关闭。XML中没有属性。是一个元素

2我添加了一个SQL变量,以便灵活地查找适当的XML片段

SQL


您正在使用哪个数据库?SQL Server 2014 12.0.4100.1
UPDATE Customers
SET CustomColumns.modify('replace value of 
(/CustomColumnsCollection/CustomColumn[@Name=("Sales Manager ")]/Value/text())[1] with ("Gary Shaw")
')
WHERE CustomerID = 'aptcustomerid'
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, CustomColumns XML);
INSERT INTO @tbl ( CustomColumns) VALUES
(N'<CustomColumnsCollection>
   <CustomColumn>
      <Name>ReceiveRebate</Name>
      <DataType>5</DataType>
      <Value>False</Value>
   </CustomColumn>
   <CustomColumn>
      <Name>Sales Manager</Name>
      <DataType>0</DataType>
      <Value>Ben Dover</Value>
   </CustomColumn>
   <CustomColumn>
      <Name>SurveyDate</Name>
      <DataType>1</DataType>
      <Value />
   </CustomColumn>
</CustomColumnsCollection>');
-- DDL and sample data population, end

-- before
SELECT * FROM @tbl;

DECLARE @nameElement VARCHAR(30) = 'Sales Manager';

UPDATE @tbl
SET CustomColumns.modify('replace value of 
(/CustomColumnsCollection/CustomColumn[Name=sql:variable("@nameElement")]/Value/text())[1] 
with ("Gary Shaw")
');
--WHERE CustomerID = 'aptcustomerid'

-- after
SELECT * FROM @tbl;