在将
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)
您可以在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 由Adam Machanic.