2014-01-25 3 views
0
DECLARE @Test TABLE (ID INT NOT NULL, XmlContent XML) 

INSERT INTO @Test VALUES (1, 
    '<location> 
     <locationName>Loc1</locationName> 
     <locationInchargeName>User1</locationInchargeName> 
    </location> 
    <location> 
     <locationName>Loc2</locationName> 
     <locationInchargeName>User2</locationInchargeName> 
     <locationInchargeName>User3</locationInchargeName> 
    </location>') 

SELECT ID, E.P.value('locationName[1]','varchar(200)') as locationName, 
    E.P.value('locationInchargeName[1]','varchar(200)') AS locationInchargeName 
FROM @Test 
CROSS APPLY XmlContent.nodes('location') as E(P) 

이렇게하면 각 위치 이름의 출력에 첫 번째 위치의 incharge 이름이 부여됩니다.여러 내부 노드 값을 얻는 방법

locationName locationInchargeName 
------------- ---------------------  
Loc1   User1 
Loc2   User2 

위치 이름과 함께 모든 locationInchargeNames의 이름을 얻는 방법은 무엇입니까? 다음과 같이 입력하십시오 :

locationName locationInchargeName 
------------- ---------------------  
Loc1   User1 
Loc2   User2 
Loc2   User3  

어떤 도움을 주시면 감사하겠습니다.

답변

0

이 시도 :

SELECT 
    ID, 
    XTbl1.Loc.value('locationName[1]','varchar(200)') as locationName, 
    XTbl2.InCharge.value('.','varchar(200)') AS locationInchargeName 
FROM @Test 
CROSS APPLY XmlContent.nodes('location') as XTbl1(Loc) 
CROSS APPLY XTbl1.Loc.nodes('locationInchargeName') as XTbl2(InCharge) 
관련 문제