결과가 모든 element
인스턴스를 반환하지 않는 .value
방법의 경로를 이동할 때 내가 SQL 서버 2012XML을 분쇄 .Value 싱글
에 Xml
열을 쿼리입니다!
,c.value('(*/*/Visitors/Visitor/@Name)[1]', 'NVARCHAR(50)') AS Visitor
,c.value('(*/*/Senders/Sender/@Name)[1]', 'NVARCHAR(50)') As Sender
내가 원래 nodes
방법을 사용했지만, Wildcard
가 나는 (아래)하지만, 같은과 올바른 결과를 얻을 수 있습니다 알고 이제 성능
CROSS APPLY c.nodes('*') dd(d)
OUTER APPLY d.nodes(Visitors/Visitor) As ee(e)
OUTER APPLY d.nodes('Senders/Sender') ff(f)
을 죽이고 반환하는 방법이 3 개의 싱글 톤을 선언하지 않고 .value
메서드의 경로를 사용하여 모든 요소 결과를 얻거나 복수 요소 인스턴스를 반환하는 유일한 방법은 .nodes
입니다.
감사합니다.
,c.value('(*/*/Visitors/Visitor/@Name)[1]', 'NVARCHAR(50)') AS Visitor
,c.value('(*/*/Visitors/Visitor/@Name)[2]', 'NVARCHAR(50)') AS Visitor2
,c.value('(*/*/Visitors/Visitor/@Name)[3]', 'NVARCHAR(50)') AS Visitor3
,c.value('(*/*/Senders/Sender/@Name)[1]', 'NVARCHAR(50)') As Sender
,c.value('(*/*/Senders/Sender/@Name)[2]', 'NVARCHAR(50)') As Sender2
,c.value('(*/*/Senders/Sender/@Name)[3]', 'NVARCHAR(50)') As Sender3
'.value()'는 ** 단일 값 ** 만 반환합니다 ** - 노드 목록을 열거해야하는 경우'.nodes()'를 사용하십시오 - 그것이 그곳에 있습니다! 그러나 제발 -'.nodes (*)'를 사용하지 마십시오. 단지 코딩이 잘못되었습니다 ... –
그래, .nodes()에서 꺼 냈습니다. 다시 내 질문에 대답, 질문에 귀하의 의견을 이동! – KeyboardFriendly