将带有属性的XML元素插入SQL XML列

时间:2018-01-05 20:29:03

标签: sql sql-server xml tsql xml-dml

我在[MyTable].Column1中存储了以下XML数据,这是XML类型列。

enter image description here

我想向其插入一个新元素:

enter image description here

我正在使用以下SQL,它成功执行但是当我再次查询相同的列值时,我没有看到我的新XML元素。我是否会错过插入带属性的元素的某些语法?

UPDATE [MyTable] 
SET Column1.modify('insert <Setting Name="H" Value="0"/> as last into (/SettingValues)[1]')
WHERE ID = 'xxxxx' 

1 个答案:

答案 0 :(得分:3)

首先 - 为您的下一个问题:请不要发布图片!尝试设置测试场景。请阅读How to ask a good SQL questionHow to create a MCVE

关于您的问题

您的代码 - 一见钟情 - 应该有效。但是你明显修改它以适应这个论坛。

DECLARE @myTable TABLE(ID VARCHAR(100),Column1 XML)
INSERT INTO @myTable VALUES
 ('111'
  ,'<SettingValues>
     <Setting Name="A-name" Value="A-value"/>
   </SettingValues>')
, ('222'
  ,'<SettingValues>
     <Setting Name="A-name" Value="A-value"/>
   </SettingValues>');

UPDATE @MyTable 
SET Column1.modify('insert <Setting Name="H" Value="0"/> as last into (/SettingValues)[1]')
WHERE ID = '222';

SELECT * 
FROM @myTable

这可以按预期工作。

ID  Column1
111 <SettingValues><Setting Name="A-name" Value="A-value" /></SettingValues>
222 <SettingValues><Setting Name="A-name" Value="A-value" /><Setting Name="H" Value="0" /></SettingValues>

执行后,您会看到“1行受影响”。

一些想法:

  • 过滤器未完全填充
  • 给定的XML声明名称空间但从不使用它们......这有点奇怪。您是否减少了名称空间并且原始XML包含默认名称空间(或者元素以某种方式加前缀)?
  • 您正在检查错误的目标(其他服务器,其他架构,其他表......

但是:上面的代码应该有用......