SQL Server XML-столбец существует () запрос - PullRequest
7 голосов
/ 24 июня 2010

Предполагается, что у меня есть таблица 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

Спасибо

1 Ответ

7 голосов
/ 24 июня 2010

Попробуйте это:

SELECT *
FROM XmlTest
WHERE Data.exist('/data/item[type[@v=''3''] and value[@v=''DEBIT'']]') = 1
...