【问题标题】:Insert XML element with attribute into SQL XML column将具有属性的 XML 元素插入 SQL XML 列
【发布时间】:2018-01-05 20:29:03
【问题描述】:

我将以下 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' 

【问题讨论】:

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


    【解决方案1】:

    首先 - 对于您的下一个问题:请不要发布图片!尝试设置一个测试场景。请阅读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 包含默认名称空间(或元素以某种方式添加前缀)?
    • 您正在检查错误的目标(其他服务器、其他架构、其他表...

    但是:上面的代码应该可以工作...

    【讨论】:

    • 我认为他问题中的图片很棒!这是非常有帮助和说明性的!请不要限制图片。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多