このような別のテーブルの列IDに基づいて、複数の列を持つテーブルの値を選択しようとしています
foo:
+-------+--------+--------+--------+
| id | tag | col1 | col2 |
+-------+--------+--------+--------+
| 1 | XX | 1 | 2 |
+-------+--------+--------+--------+
bar:
+-------+--------+--------+
| id | field | tag |
+-------+--------+--------+
| 1 | col1 | XX |
+-------+--------+--------+
| 2 | col2 | XX |
+-------+--------+--------+
私が探しているのは、リフレクションのようなメカニズムだと思います。列は時間の経過とともに変化する可能性があるため、クラスやテーブルについて事前に知る必要なく、そのプロパティの名前に基づいてプロパティ値にマップできます。結果のテーブルは次のようになります
foobar:
+--------+--------+
| tag | value |
--------++--------+
| XX | 1 |
--------++--------+
| XX | 2 |
--------++--------+
以下のコードのようなものを試してみましたが、両方の結果列に列 ID が表示されます。列の名前ではなく、その特定のフィールドの値が必要です。
declare @SQL nvarchar(max)
declare @Pattern nvarchar(100)
set @Pattern = 'select bar.field, ''foo.[COL_NAME]'' as CurrentValue FROM bar INNER JOIN foo ON foo.[tag] = bar.[tag]'
select @SQL = stuff((select ' union all '+replace(@Pattern, '[COL_NAME]', field)
from bar
for xml path(''), type).value('.', 'nvarchar(max)'), 1, 11, '')
exec (@SQL)