SQL Server 2008には、次の構造のテーブルがあります。
id = int
numero = int
datos = xml
[other_misc_fields]
このSQLフィドルのいくつかのサンプルデータを含む表を見ることができます。リンクからわかるように、フィールドdatos(データ)は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を使用して(別の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よりもこれを行うためのより良い方法はありますか?