/ / Запазване на реда на елементите при раздробяване на XML данни в SQL редове - sql, sql-server-2005, xquery

Запазване на реда на елементите при раздробяване на XML данни в SQL редове - SQL, sql-server-2005, xquery

Как да върна последователността на елементите при раздробяване на XML в редове в изглед на SQL Server?

Въвеждане на проба:

<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 за отговор № 1

Можеш да използваш row_number() на 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)

Ref: Уникално идентифициране на XML възли с DENSE_RANK от Адам Маханик.