与其他类似文章一样,我需要从表中的Xml列应用条件中检索任何行,例如,假设您有一个类似xml的列:
<DynamicProfile xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WinTest"> <AllData xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <d2p1:KeyValueOfstringstring> <d2p1:Key>One</d2p1:Key> <d2p1:Value>1</d2p1:Value> </d2p1:KeyValueOfstringstring> <d2p1:KeyValueOfstringstring> <d2p1:Key>Two</d2p1:Key> <d2p1:Value>2</d2p1:Value> </d2p1:KeyValueOfstringstring> </AllData> </DynamicProfile>
我的查询将能够返回节点值<d2p1:Key> = 'some key value'和节点值所有的行<d2p1Value = 'some value value'。
<d2p1:Key> = 'some key value'
<d2p1Value = 'some value value'
想象一下,就像一个动态表,其中KEY节点代表列名,Value节点代表列的值。
由于键和值节点不是顺序的,因此以下查询不起作用:
select * from MyTable where MyXmlField.exist('//d2p1:Key[.="One"]') = 1 AND MyXmlField.exist('//d2p1:Value[.="1"]') = 1
而不是将//d2p1:key[.="One"]和//d2p1:Value[.="1"]作为两个单独的搜索来查找,而是执行一次一次查找两者的单个查询,如下所示:
//d2p1:key[.="One"]
//d2p1:Value[.="1"]
//d2p1:KeyValueOfstringstring[./d2p1:Key="One"][./d2p1:Value=1]