2014-07-08 2 views
0

매개 변수 (ID 및 값)가있는 테이블이 있습니다.여러 xml 셀을 행으로 변환

id, val 
======= 
1, 3 
1, 7 
2, 8 
2, 10 
2, 15 

임시 테이블 및 커서이 일을 정말 간단하다 :이 같은 결과를 얻을 싶습니다가 XML로 저장 정수의 목록이 포함 된 일부 매개 변수가 있습니다

id, val 
========= 
1, '<ArrayOfInt><int>3</int><int>7</int></ArrayOfInt>' 
2, '<ArrayOfInt><int>8</int><int>10</int><int>15</int></ArrayOfInt>' 

을 즉 (그러나 나는 이것을 피하고 싶다). 예를 들어 : 각 행에 대해 XML을 검색하고 : 커서없이이 작업을 수행하는 똑똑한 방법은

[...] 
WHILE @@FETCH_RESULT = 0 
BEGIN 
    INSERT INTO #tmp 
    SELECT 
     @id, 
     x.ArrayOfInt.value('.','int') 
    FROM @xml.nodes('//ArrayOfInt/int') x(ArrayOfInt) 
    FETCH NEXT FROM cur INTO @id, @xml 
END 
[...] 

있습니까?

답변

1

나는 나 자신이 대답을 얻는 데 아주 가까웠다. 결과를 얻으려면 다음과 같이 썼습니다.

declare @params table 
(
    id int identity(1,1), 
    val xml 
) 

insert into @params (val) values ('<ArrayOfInt><int>3</int><int>7</int></ArrayOfInt>') 
insert into @params (val) values ('<ArrayOfInt><int>8</int><int>10</int><int>15</int></ArrayOfInt>') 


SELECT  
    p.id, 
    tab.ArrayOfInt.value('(.)','int') as val 
FROM @params p 
    CROSS APPLY p.val.nodes('/ArrayOfInt/int') as tab(ArrayOfInt) 

결과는 예상대로입니다.