2016-08-09 5 views
1

검색 기준을 포함하는 SQL 매개 변수를 사용하여 테이블에서 XML 데이터를 쿼리하려고하는데 예기치 않은 결과가 발생합니다.SQL 매개 변수를 사용하여 XML 데이터 쿼리

는 예를 들어, 다음 T-SQL 코드를 고려 : 나는 사실 0으로 반환이 쿼리의 결과를 기대

DECLARE @Configuration AS TABLE 
(
    [Data] XML NOT NULL 
); 

INSERT INTO Configuration ([Data]) VALUES '<Configuration><Colors><Color>RED</Color><Color>BLUE</Color></Colors></Configuration>'); 

DECLARE @Color AS NVARCHAR(MAX); 

SET @Color = N'YELLOW'; 

SELECT COUNT(*) FROM @Configuration WHERE [Data].exist('/Configuration/Colors/Color/text() = sql:variable("@Color")') = 1; 

을,이 쿼리 1. 더 나쁜 반환은 반환 나타납니다 하나의 값에 관계없이 하나를 설정하면 @Color으로 설정됩니다.

무엇이 누락 되었습니까?

답변

3

당신은

SELECT COUNT(*) FROM @Configuration WHERE [Data].exist('/Configuration/Colors/Color[text() = sql:variable("@Color")]') = 1; 

XPath 표현이 [] 묶어야로되어있다 쿼리에 [ 누락했다. XPath 및 작문 표현에 대한 자세한 내용은 this tutorial page을 참조하십시오.

+0

실제 의미론이 OP의 쿼리와 어떤 관련이 있습니까? '존재'를 실제로 평가하는 것은 무엇입니까? –

+0

@MartinSmith 주어진 매개 변수 값이 XML에 존재하는지 찾으려는 것 같습니다. – techspider

+0

그건 제가 요청한 것이 아닙니다. 쿼리가 현재 무엇을하고 있는지 물었습니다. 오류가 발생하지 않으므로. 그냥 부울 결과의 존재를 평가하는 것일까 요? –

관련 문제