将具有属性的 XML 元素插入 SQL XML 列
Insert XML element with attribute into SQL XML column
我将以下 XML 数据存储在 [MyTable].Column1
中,这是一个 XML
类型的列。
我想向其中插入一个新元素:
我正在使用以下 SQL,它执行成功但是当我再次查询相同的列值时,我没有看到我的新 XML 元素。我是否错过了用于插入具有属性的元素的某些语法?
UPDATE [MyTable]
SET Column1.modify('insert <Setting Name="H" Value="0"/> as last into (/SettingValues)[1]')
WHERE ID = 'xxxxx'
首先-对于你的下一个问题:请不要post图片!尝试设置一个测试场景。请阅读How to ask a good SQL question and How 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 包含默认名称空间(或者元素以某种方式添加了前缀)?
- 您正在检查错误的目标(其他服务器、其他架构、其他 table...
但是:上面的代码应该可以工作...
我将以下 XML 数据存储在 [MyTable].Column1
中,这是一个 XML
类型的列。
我想向其中插入一个新元素:
我正在使用以下 SQL,它执行成功但是当我再次查询相同的列值时,我没有看到我的新 XML 元素。我是否错过了用于插入具有属性的元素的某些语法?
UPDATE [MyTable]
SET Column1.modify('insert <Setting Name="H" Value="0"/> as last into (/SettingValues)[1]')
WHERE ID = 'xxxxx'
首先-对于你的下一个问题:请不要post图片!尝试设置一个测试场景。请阅读How to ask a good SQL question and How 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 包含默认名称空间(或者元素以某种方式添加了前缀)?
- 您正在检查错误的目标(其他服务器、其他架构、其他 table...
但是:上面的代码应该可以工作...