2012-04-16 11 views
5

XML nesnesini SQL Server görünümünde satırlara ayırırken öğe sırasını nasıl döndürürüm?XML verilerini SQL satırlarına aktarırken öğe sırasını koruyun

Örnek Giriş:

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

İstenilen çıktı:

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

Mevcut görünüm:

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) 

cevap

11

Sen xml düğümünde row_number() kullanabilirsiniz.

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: Adam Machanic tarafından Uniquely Identifying XML Nodes with DENSE_RANK.