2010-06-24 1 views
7

존재 :SQL 서버 XML 열이 나는 다음과 같은 값을 포함하는 XML 열이있는 SQL Server 2005의 테이블이 가정() 쿼리

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 = "DEBIT". 다음과 같이 나는 존재한다() 함수를 사용하고

:

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 값이 "DEBIT"인 항목 만있는 레코드 만 리턴 할 수 있습니까? 즉, 단지 XMLid 1

감사

답변

7

기록이 시도 :

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

한 DARN을! 나는 약간의 연구 끝에이 솔루션을 생각해 내었습니다 ... 단지 6 분 더 빨랐다는 것을 알기 위해서 ..... ARGH! :-) 좋은 전화, 그래도! –

+1

완벽. 도움을 주신 Matt & Marc_s에게 감사드립니다. – doshea

관련 문제