2014-01-25 20 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) 
相關問題