我在 SQL Server 2008 中有一个表,其结构如下:
id = int
numero = int
datos = xml
[other_misc_fields]
您可以在此sql fiddle上查看包含一些示例数据的表。正如您在链接上看到的,字段datos (data) 是一个 XML。此 XML 没有已知的结构。我所知道的是根是“lote”,每个字段都有一个属性“title”,它是该字段的“显示名称”。我希望能够沿着这条线查询一些东西
id | numero | display_name_field_1 | display_name_field_2 | display_name_field_3
1 | 23 | value_field_1 | value_field_2 | value_field_3
使用一些动态 sql(来自另一个所以回答)我能够从每个节点获取值,但我无法弄清楚如何使用 title 属性重命名它:
select @SQL = 'select '+stuff(
(
select ',T.N.value('''+T.N.value('local-name(.)', 'sysname')+'[1]'', ''varchar(max)'') as '+T.N.value('local-name(.)', 'sysname')
from @XML.nodes('/*[local-name(.)=sql:variable("@KnownName")]/*') as T(N)
for xml path(''), type
).value('.', 'nvarchar(max)'), 1, 1, '')+
' from @XML.nodes(''/*[local-name(.)=sql:variable("@KnownName")]'') as T(N)
其中@KnownName 是“lote”。
如何修改该查询以便将字段重命名为节点的@title属性?或者,有没有比动态 sql 更好的方法呢?