У меня есть следующий XML, хранящийся в поле XML в базе данных SQL Server 2008.
<attributes>
<attribute>
<key>animal</key>
<value>rat</value>
</attribute>
<attribute>
<key>color</key>
<value>black</value>
</attribute>
</attributes>
Я могу выбрать все записи из таблицы, которые имеют ключ «животных» со значением «крысы» со следующим xpath в sql.
SELECT *
FROM XmlEvents
WHERE Attributes.exist('/attributes/attribute[key="animal" and value="rat"]') = 1
Как бы я проверил совпадения с несколькими атрибутами?
Я пытаюсь найти строки, где: (ключ = животное и значение = крыса) и (ключ = цвет и значение = черный).
(Да, я мог бы добавить еще один .exist с предложением AND в своем предложении WHERE, но я стараюсь этого избежать)
Бонусные баллы, если вы можете вести меня в правильном направлении, чтобы сделать это чем-то динамичным. Я хотел бы иметь хранимую процедуру или функцию, которая могла бы каким-то образом взять список пар ключ / значение и найти все строки, которые соответствуют всем предоставленным.