2012-04-16 36 views
5

Làm cách nào để trả về chuỗi yếu tố khi băm nhỏ XML thành các hàng trong khung nhìn SQL Server?Giữ nguyên thứ tự phần tử khi băm nhỏ dữ liệu XML thành các hàng SQL

Sample Input:

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

mong muốn đầu ra:

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

hiện quan điể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) 

Trả lời

11

Bạn có thể sử dụng row_number() vào nút xml.

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) 

Tham khảo: Uniquely Identifying XML Nodes with DENSE_RANK bởi Adam Machanic.

Các vấn đề liên quan