2016-10-31 4 views
2

XML 열이있는 SQL 테이블이 있습니다. 열 값은 다음과 같습니다.XML 노드 값을 SQL에서 별도의 행으로 분리

<StudentGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <StudentIds> 
    <int>3000</int> 
    <int>3001</int> 
    <int>3002</int> 
    <int>8</int> 
    <int>9</int> 
    </StudentIds> 
</StudentGroup> 

각 StudentID를 한 행에 표시하는 대신 별도의 행에 가져 오려고합니다. 다음은 내가 한 일입니다.

select 
    xmlColumn.value('(/StudentGroup/StudentIds)[1]','varchar(max)') as IDs 
from myTable 

이 select 문은 ID를 한 행에 반환합니다. 이처럼 : 무엇을 원하는

30003001300289 

3000 
3001 
3002 
8 
9 

입니다 도와주세요! 미리 감사드립니다.

답변

1

당신은 변수의 XML이있을 때 :

DECLARE @x XML = ' 
<StudentGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <StudentIds> 
    <int>3000</int> 
    <int>3001</int> 
    <int>3002</int> 
    <int>8</int> 
    <int>9</int> 
    </StudentIds> 
</StudentGroup>'; 

SELECT 
    n.v.value('.','INT') AS ID 
FROM 
    @x.nodes('/StudentGroup/StudentIds/int') AS n(v); 

당신은 테이블에 XML이있을 때 :

DECLARE @x XML = ' 
<StudentGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <StudentIds> 
    <int>3000</int> 
    <int>3001</int> 
    <int>3002</int> 
    <int>8</int> 
    <int>9</int> 
    </StudentIds> 
</StudentGroup>'; 

DECLARE @t TABLE(
    x XML 
); 
INSERT INTO @t(x)VALUES(@x); 

SELECT 
    n.v.value('.','INT') AS ID 
FROM 
    @t 
    CROSS APPLY x.nodes('/StudentGroup/StudentIds/int') AS n(v); 
+0

날 테이블에 대한 것을 다시 보자 ... 빠른 미안 포스터;) –

+0

고마워! 그게 정확히 내가 찾고 있었던거야. – nmess88

+0

@ nmess88 환영합니다 =) –

관련 문제