Принятие у меня есть таблица 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>' )
Я хочу протестировать на существование элементов объекта с типом v = "3" И значение v = "ДЕБЕТ".
Я использую существование () функция следующим образом:
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
Спасибо
Попробуйте так:
SELECT *
FROM XmlTest
WHERE Data.exist('/data/item[type[@v=''3''] and value[@v=''DEBIT'']]') = 1