我正在尝试根据像这样的另一个表中的列 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)