我正在使用SQL Server 2008 R2。
想象一张桌子:
id | contentXml
1 | <node attr1='a' attr2='b' attr3='a'/>
2 | <node attr1='a' attr2='b' attr3='c'/>
3 | <node attr3='c' attr2='d' attr1='c'/>
预期结果应该是attr1和attr3值相同的ID列表。请注意,属性的顺序可能与上面的示例不同。
结果:1和3
我认为最快的方法是使用sqlxml exist()方法:
select
t.id
from Table1 as t
where t.contentXml.exist('node[@attr1 = @attr3]') = 1
也可以使用sqlxml value()来做到这一点:
select
t.id
from Table1 as t
where
t.contentXml.value('(node/@attr1)[1]', 'varchar(max)') =
t.contentXml.value('(node/@attr3)[1]', 'varchar(max)')
但这会比较慢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句