Предполагается, что у меня есть таблица SQL Server 2005 со столбцом xml, содержащим следующие значения:
CREATE TABLE XmlTest (
XMLid int,
Data xml)
INSERT XMLTest
VALUES ( 1 , '<data><item><type v="1" /><value v="12.56" /></item><item><type v="3" /><value v="DEBIT" /></item></data>' )
INSERT XMLTest
VALUES ( 2 , '<data><item><type v="1" /><value v="99.22" /></item><item><type v="3" /><value v="CREDIT" /></item></data>' )
INSERT XMLTest
VALUES ( 3 , '<data><item><type v="3" /><value v="12.56" /></item><item><type v="1" /><value v="DEBIT" /></item></data>' )
Я хочу проверить наличие элементов item с типом v = "3" И значением v = "DEBIT".
Я использую функцию exist () следующим образом:
SELECT *
FROM XmlTest
WHERE Data.exist('/data/item/type[@v=''3'']') = 1
AND Data.exist('/data/item/value[@v=''DEBIT'']') = 1
Однако это возвращает меня к строкам с XMLid 1 и 3.
Может ли кто-нибудь обрисовать, какие изменения мне нужно внести в мое предложение WHERE, чтобы оно возвращало только записи, в которых есть элемент, у которого значение типа v равно 3, а значение v равно "ДЕБИТ"? т.е. только запись с XMLid 1
Спасибо