2009-11-06 5 views
0

데이터를 쿼리하는 데 특히 골치 아픈 xml 열이 있습니다.xml 열에서 하나의 값 선택

with XMLNAMESPACES(default 'http://www.mrq.gouv.qc.ca/T5') 
select xmldata.value('(//Groupe02/*/Montants/B_PrestREER_FERR_RPDB)[1]', 'decimal(16,2)'); 

이 Groupe02와 Montants 사이의 와일드 카드 중 하나가 될 수 :

쿼리의 중요한 부분은 다음과 같습니다 "그것이 무엇이다"그래서 스키마는 수익의 퀘벡 정부에 의해 고정되어 ADR 또는 T. (즉, 한 문자 요소 이름)

T 노드가 아닌 A, D 또는 R 노드 만 쿼리하면 문제가 발생합니다. 첫 번째 추측으로 내가 시도 :

with XMLNAMESPACES(default 'http://www.mrq.gouv.qc.ca/T5') 
select @x.value('(//Groupe02/A|D|R/Montants/B_PrestREER_FERR_RPDB)[1]', 'decimal(16,2)'); 

을하지만이 오류로 인해 실패 이러한 쿼리가 만들 수 있습니다 가능한 다른 어떤 방법

의 "XQuery를 구문 '노동 조합'은 지원되지 않습니다."

답변

3

[name()!='T']을 사용하면 효과가 있다고 생각합니다. 예 :

select @x.value("(//Groupe02/*[name()!='T']/Montants/B_PrestREER_FERR_RPDB)[1]", 'decimal(16,2)'); 
+0

은 정말 좋은 생각입니다! :-) –

+1

브릴리언트 --- local-name()은 사용할 함수라고 할 수 있습니다. –