2012-09-24 2 views
0

XML 필드에서 값을 선택하고 네임 스페이스를 정의하는 방법을 알고 있지만 여러 xpath 쿼리를 사용하여 선택 항목에 할당해야합니다.SQL 변수를 사용하여 XML에 대한 네임 스페이스를 정의해야합니다. 값 선택

SELECT 
    id, name, 
    [XML].value('declare namespace test="http://www.test.org/xml/"; 
       declare namespace test2="http://www.test2.org"; 
       (//test:Address[1][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation1, 
    [XML].value('declare namespace test="http://www.test.org/xml/"; 
       declare namespace test2="http://www.test2.org"; 
       (//test:Address[2][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation2 
FROM 
    TEST 

나는 변수를 사용하여

'declare namespace test="http://www.test.org/xml/"; 
declare namespace test2="http://www.test2.org";' 

를 교체하려면 다음을하는 것보다 더 쉬운 방법이있다. 문자열을 추가하려고 시도했지만 다음을 얻었습니다.

"value"XML 데이터 형식의 인수 1은 문자열 리터럴이어야합니다.

쉬운 방법이 있습니다.

감사합니다,

- 제임스

+2

[xmlnamespaces] (http://msdn.microsoft.com/en-us/library/ms177607.aspx)를 참조하십시오. 변수를 사용할 수는 없지만 전체 쿼리에 대해 한 번만 네임 스페이스를 선언하면됩니다. –

답변

1

감사 @MikaelEriksson, 사람이 비슷한 문제가 경우

. 여기에 답이 있습니다.

;WITH XMLNAMESPACES ('http://www.test.org/xml/' as test, 'http://www.test.org/xml/' as test2) 
SELECT id, 
     name, 
     [XML].value('(//test:Address[1][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation1, 
     [XML].value('(//test:Address[2][test2:Global=1]/test:Street)[1] ', 'varchar(max)') AS streetLocation2 
FROM TEST 
관련 문제