我将以下XML存储在SQL Server 2008数据库的XML字段中。
<attributes>
<attribute>
<key>animal</key>
<value>rat</value>
</attribute>
<attribute>
<key>color</key>
<value>black</value>
</attribute>
</attributes>
我可以从表格中选择所有条目中的所有条目,其中“动物”键的值为“老鼠”,并在sql中包含以下xpath。
SELECT *
FROM XmlEvents
WHERE Attributes.exist('/attributes/attribute[key="animal" and value="rat"]') = 1
如何检查具有多个属性的匹配?
我正在尝试找到以下行:(Key = Animal&amp; Value = Rat)AND(Key = Color&amp; Value = Black)。
(是的,我可以在我的WHERE子句中添加另一个带有AND的.exist,但我试图避免这种情况)
如果你可以引导我朝着正确的方向发展,那就是积极的动力。我希望有一个存储过程或函数,它可以以某种方式获取键/值对的列表,并找到匹配所有提供的所有行。
答案 0 :(得分:3)
XPath允许嵌套谓词和多个谓词。你可以写
/attributes[attribute[key="animal" and value="rat"]][attribute[key="color" and value="black"]]
或等效,但有点短
/attributes[attribute[key="animal"]/value="rat" and attribute[key="color"]/value="black"]