更新表中的xml列

时间:2017-04-05 18:36:09

标签: sql-server xml

我需要从列中的Xml值中删除属性为A且值为xxxx的Xml元素。

方法1:

update t set x = x.query('//E[@A != "xxxx"]')

方法2:

update t set x.modify('delete /E[@A = "xxxx"]')

哪一个更好?

1 个答案:

答案 0 :(得分:1)

两个电话都不会这样做:

<div>
    <img src="http://lorempixel.com/500/333/nature/2" class="img-fluid">
    <div class="comment d-inline-block align-top">
        <div class="comment-header">
            <span>title</span>
        </div>
        <blockquote>comment</blockquote>
    </div>
</div>

- 尝试使用这种方法

DECLARE @xml XML=
N'<root>
  <test pos="1" a="xxx">test 1</test> 
  <test pos="2" a="SomeOther">test 2</test> 
  <test pos="3" a="xxx">test 3</test>
  <OtherElement>This is another element</OtherElement> 
  </root>';

- 或者尝试使用此

SET @xml=@xml.query(N'//test[@a!="xxx"]')

第一个结果是

SET @xml.modify(N'delete //test[@a="xxx"]')

SELECT @xml;

第二次返回时

<test pos="2" a="SomeOther">test 2</test>

XML不会存储为您看到的文字。它存储为表示复杂文档的树结构。要修改这很容易,只需要开出一些元素。 <root> <test pos="2" a="SomeOther">test 2</test> <OtherElement>This is another element</OtherElement> </root> 方法必须重建XML并将第一个替换为新的XML。所以我的明确建议是:使用query()方法!如果您对modify()XQuery非常满意,FLWOR方法会更强大,但这是另一个故事......