2012-07-12 3 views
1

XML 데이터를 SQL Server 테이블로로드하려고합니다.XML 데이터를 SQL Server로로드, 특수 XML 구조

XML 파일은 다음과 같습니다

<root> 
    <Company ID="183"> 
     <User UserName="Kim" /> 
     <User UserName = "Joe" /> 
    </Company> 
<Company ID="123"> 
     <User UserName="George" /> 
     <User UserName = "Sal" /> 
    </Company> 
</root> 

내가 회사 ID와 사용자 이름을 모두 가지고 사용자 이름의 테이블을 좀하고 싶습니다. 이 예를 들어 는 :

ID  UserName 
---  -------- 
183  Kim 
183  Joe 
123  George 
123  Sal 

I는 각 회사의 모든 사용자 이름 통해 반복과 같은 몇 가지를 시도했습니다,하지만이 솔루션에 맞게 2 개 이상의 층이 특히이 매우 복잡하다.

해봤 또 다른 한가지는 다음과 같습니다

SELECT 
t.c.query('./UserName').value('.','varchar(20)') AS A , 
(
    SELECT 
    t1.c1.value('@ID', 'varchar(10)') 
    FROM @x.nodes('/root/Company')AS t1(c1) 
) 
FROM @x.nodes('/root/Company/User')AS t(c) 

하지만 하위 쿼리는 1 개 이상의 값이 있는지 오류가 발생합니다.

제안 사항? 감사합니다.

답변

1

당신의 말 SQL을 가정하지만 당신은 정말 SQL 서버을 의미 - 이런 식으로 뭔가를 시도 : 나에게 당신이 찾고있는 출력을 제공

DECLARE @input XML = '<root> 
    <Company ID="183"> 
     <User UserName="Kim" /> 
     <User UserName = "Joe" /> 
    </Company> 
<Company ID="123"> 
     <User UserName="George" /> 
     <User UserName = "Sal" /> 
    </Company> 
</root>' 

SELECT 
    CompanyID = Comp.value('(@ID)[1]', 'int'), 
    UserName = USerTbl.value('(@UserName)[1]', 'varchar(50)') 
FROM 
    @input.nodes('/root/Company') T(Comp) 
CROSS APPLY 
    Comp.nodes('User') AS T2(UserTbl) 

합니다.

+1

감사합니다. 나는 SQL Server를 의미하며 완벽하게 작동합니다! – Omri374