我需要從列中的Xml值中刪除具有A
屬性的Xml元素,其值爲xxxx
。更新表中的xml列
方法1:
update t set x = x.query('//E[@A != "xxxx"]')
方法2:
update t set x.modify('delete /E[@A = "xxxx"]')
哪一個更好?
我需要從列中的Xml值中刪除具有A
屬性的Xml元素,其值爲xxxx
。更新表中的xml列
方法1:
update t set x = x.query('//E[@A != "xxxx"]')
方法2:
update t set x.modify('delete /E[@A = "xxxx"]')
哪一個更好?
兩個調用會做不一樣的:
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>';
--Try這與任何這種方法
SET @[email protected](N'//test[@a!="xxx"]')
--Or本
SET @xml.modify(N'delete //test[@a="xxx"]')
SELECT @xml;
結果試試吧第一個是
<test pos="2" a="SomeOther">test 2</test>
雖然第二個返回
<root>
<test pos="2" a="SomeOther">test 2</test>
<OtherElement>This is another element</OtherElement>
</root>
XML不存儲爲文本你看到。它作爲表示複雜文檔的樹結構存儲。到修改這很容易,只是踢出一些元素。 query()
方法必須重建XML並用新的替換第一個。所以我明確的建議是:使用modify()
的方法!如果你真的很擅長XQuery
和FLWOR
query()
的方法更強大,但這是另一回事......
第二個意圖更清晰,所以出於維護的原因,我會選擇那個。 – pmbAustin