5

在 SQL Server 视图中将 XML 分解为行时,如何返回元素序列?

样本输入:

<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)
4

1 回答 1

11

您可以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)

参考:Adam Machanic使用 DENSE_RANK 唯一标识 XML 节点。

于 2012-04-16T12:04:17.887 回答