2010-05-27 3 views
1

I가 다음과 같은 XML :SQL 서버는 노드

<tests> 
    <test>1</test> 
    <test>2</test> 
    <test>3</test> 
</tests> 

그리고 나는 다음과 같은 쿼리를 시도하고있다 :

CREATE PROCEDURE [dbo].[test] 
    @Tests xml=null 
AS 
BEGIN 
    SELECT 
     doc.col.value('(test)[1]', 'nvarchar(50)') 
    FROM 
     @Tests.nodes('//tests') AS doc(col) 
END 

을하지만 그것은 단지 나에게 처음

에서 값을 반환

여기에 무엇이 누락 되었습니까?

+1

이것은 'mssql'이라는 태그가 붙은 유일한 질문입니다. 앞으로 태그 선택에 관심을 갖자. 알았지? –

+0

죄송합니다, 형편 없음. 나는 더 적절한 tage를 유지하려고 노력할 것이다. – Kyle

답변

4

, 당신은, 당신은 모든 <test> 노드의리스트를 얻을 귀하의 .nodes()

SELECT 
    doc.col.value('(.)[1]', 'nvarchar(50)') 
FROM 
     @Tests.nodes('/tests/test') AS doc(col) 

그 방법의 다른 XPath를 사용할 필요가 당신은 선택할 수 있습니다 대신이 시도 (.) XPath를 사용하는 내부 XML.

2

nodes() 함수의 XPath는 1 레코드 만 반환합니다. 당신이 <test> 노드를 원하는 경우

SELECT 
    doc.col.value('.[1]', 'nvarchar(50)') 
FROM @Tests.nodes('//test') AS doc(col) 
관련 문제