sql - 将 XML 数据分解为 SQL 行时保留元素顺序

标签 sql sql-server-2005 xquery

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

示例输入:

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

期望的输出:

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

现有 View :

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)

最佳答案

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

引用号:Uniquely Identifying XML Nodes with DENSE_RANK 作者:亚当·马卡尼克。

关于sql - 将 XML 数据分解为 SQL 行时保留元素顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10171823/

相关文章:

sql-server - SQL 2005 实例不适用于 DNS

sql-server-2005 - 帮助 !如何从我的 SQL Server 分页过程中获取总行数?

sql - 在标量值函数中使用 Xquery

c# - 如何读取存储过程输出并将其作为列表返回

php - 使用sql将数据从php存储到phpmyadmin时出现未定义索引错误

sql - 为什么别名放在postgresql中的 'AS'中的 'WITH subquery'关键字前面

sql-server-2005 - SQL 服务器 2005 : disk space taken by dropped columns

xml - Web Dav 服务器上的 XQuery collection() 函数

sql-server - XQuery 在单个 SQL 更新命令中添加或替换属性

php - 在 sql 查询中定义 ORDER