sql server - Update xml column in a table -


i need remove xml element has attribute of a value of xxxx xml values in column.

method 1:

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

method 2:

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

which 1 better?

both calls not same:

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 element</otherelement>    </root>'; 

--try either approach

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

--or try this

set @xml.modify(n'delete //test[@a="xxx"]')  select @xml; 

the result of first is

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

while second returns

<root>   <test pos="2" a="someother">test 2</test>   <otherelement>this element</otherelement> </root> 

xml not stored text see. stored tree structure representing complex document. modify easy, kick out elements. query()approach has rebuild xml , replace first new one. clear advise is: use modify()approach! if xquery , flwor query() approach mightier, story...


Comments