2012-04-23 3 views
7

"tags"라는 XML 데이터 형식의 열이 있습니다. 그에서 XML 데이터 형식 열에 저장된 값이 있는지 확인하십시오.

, 정말 같은 컬렉션을 저장하고 :

내가 찾고 있어요 값 중 하나를 가진 모든 행을 선택합니다
<ArrayOfString> 
    <string>personal</string> 
    <string>travel</string> 
    <string>gadgets</string> 
    <string>parenting</string> 
</ArrayOfString> 

: 예를 들어, 내가 선택하려는 태그가 "travel"인 테이블의 모든 행

select * from posts 
where tags.value('(/ArrayOfString/string)[1]', 'nvarchar(1000)') = 'travel' 

하지만 태그 "여행"노드에서 두번째 항목 인 경우에만이 쿼리가 작동합니다

나는 내가 찾고 있어요 값의 인덱스를 알고 있다면이 작품 것을 알고있다. 값이 존재하는지 여부와 관계없이 값이 존재하는지 어떻게 확인합니까?

답변

7
select * 
from tags 
where tags.exist('/ArrayOfString/string[. = "travel"]') = 1 

변수에 대해 확인하려면 다음과 같이하십시오.

declare @Val varchar(10) 
set @Val = 'travel' 

select * 
from tags 
where tags.exist('/ArrayOfString/string[. = sql:variable("@Val")]') = 1 
4

이 같은 뭔가를 시도 할 수 있습니다 :

SELECT 
    * 
FROM 
    dbo.Posts 
WHERE 
    tags.exist('/ArrayOfString/string/text()[. = "travel"]') = 1 

이것은 당신의 XML의 문자열 중 하나에 "여행"이 모든 행을 나열합니다

관련 문제