2012-05-24 4 views
2

저장 프로 시저에 전달 된 xml 매개 변수에서 특정 값을 읽으려고합니다. 지금까지 내 코드의 대략적인 예가 아래와 같습니다.SQL에서 XML.value()가 null을 반환하지만 0이 반환됩니다.

SET @SearchFilter = 
'<?xml version="1.0"?> 
<KeywordSearch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <SelfEmployed xsi:nil="true" /> 
</KeywordSearch>' 

SET @SelfEmployed = @SearchFilter.query('/KeywordSearch/SelfEmployed[1]').value('/', 'bit') 

SELECT @SelfEmployed 

난 데 문제는 요소 요소에 값을 포함하지 않는 true 또는 false 값을 포함하고, 따라서 내가 널 기다리고있을 때 위가 제대로 반환하지만, false를 반환한다는 것입니다. 올바르게 nullable 비트 값으로 데이터 형식을 얻는 방법 있는가?

SELECT @SearchFilter.value('(/KeywordSearch/SelfEmployed/text())[1]', 'varchar(100)') 

는 다음 다시 NULL 값을 얻을 것이다 : 당신이 이런 식으로 XQuery를 변경하는 경우

답변

4

. <SelfEmployed> 노드에 텍스트 값이 있는지 여부를 확인하기 때문에 .value()을 문자열 유형 (여기서는 varchar(100)을 사용하고 있음)으로 해석해야합니다. 필요에 따라 수정하십시오.

+0

/KeywordSearch/SelfEmployed 요소의 값을 구문 분석하려고합니다. 이 요소에 값이없는 경우 (예와 같이), null가 돌려 주어집니다. 필자는 .value가 T-SQL convert를 사용하여 sppecific 스타일 플래그가 제공되지 않는 한 널 값이 기본값으로 설정된다는 것을 이해했지만 잘못된 것일 수 있습니다. – Pooli

+0

이것은 데이터 유형을 변경할 필요없이 작동했습니다. .query보다는 .value를 사용하고있는 것처럼 보이고 노드 트리의 끝에있는 텍스트를 호출하면 문제가 해결됩니다. 정말 고마워요! – Pooli

관련 문제