2012-04-16 6 views
5

SQL Server보기에서 행을 XML로 파쇄 할 때 요소 시퀀스를 반환하려면 어떻게해야합니까?XML 데이터를 SQL 행으로 파쇄 할 때 요소 순서 유지

샘플 입력 :

<ol> 
    <li>Smith</li> 
    <li>Jones</li> 
    <li>Brown</li> 
</ol> 

원하는 출력 :

Sequence Name 
-------- ----------- 
    1  Smith 
    2  Jones 
    3  Brown 

기존보기 :

CREATE VIEW OrderedList 
AS 
SELECT [Sequence] = CAST(NULL AS int) -- TODO: Get ordinal position 
     [Name] = b.b.value('.', 'nvarchar(max)') 
FROM 
(
    SELECT a = CAST('<ol><li>Smith</li><li>Jones</li><li>Brown</li></ol>' AS xml) 
) a 
CROSS APPLY a.a.nodes('/ol/li') b (b) 

답변

11

당신은 XML 노드에 row_number()를 사용할 수 있습니다.

CREATE VIEW OrderedList 
AS 
SELECT [Sequence] = ROW_NUMBER() OVER(ORDER BY b.b), 
     [Name] = b.b.value('.', 'nvarchar(max)') 
FROM 
(
    SELECT a = CAST('<ol><li>Smith</li><li>Jones</li><li>Brown</li></ol>' AS xml) 
) a 
CROSS APPLY a.a.nodes('/ol/li') b (b) 

Ref : Uniquely Identifying XML Nodes with DENSE_RANK by Adam Machanic.

관련 문제