Выбрать записи из таблицы, указанной в качестве имени столбца. Динамический sql

Я искал некоторые темы здесь, но не было никаких ответов, которые мне нужны. Я хочу сделать запрос, где я присоединюсь к таблице на основе имени столбца в первой таблице.

Я использую SQL Server, поэтому было бы полезно, если бы кто-то знал решение для этой технологии.

Вот пример того, что я хочу сделать:

Таблицы:

main_table
----------
id | tab      | another_col
----------------------
1 | product_x | abcd
2 | product_y | efgh


table_product_x
----------------------
id | yyy
----------------------
1 | simple_yyy_value1


table_product_y
----------------------
id | yyy
----------------------
2 | simple_yyy_value4

Выход:

product_x | simple_yyy_value1 | abcd
product_y | simple_yyy_value4 | efgh

Запрос(набросок)

select tab, yyy, another_col from main_table
join 'table_'+tab xxx on xxx.id = main_table.id

1 ответ

Решение

Вы можете построить это используя union all и немного динамического SQL.

declare @SQL nvarchar(max)
declare @Pattern nvarchar(100)

set @Pattern = 'select ''[TABLE_NAME]'' as TableName, yyy from table_[TABLE_NAME]'

select @SQL = stuff((select ' union all '+replace(@Pattern, '[TABLE_NAME]', tab)
                     from main_table
                     for xml path(''), type).value('.', 'nvarchar(max)'), 1, 11, '')

exec (@SQL)

Выполненная инструкция будет выглядеть примерно так:

select 'product_x' as TableName, yyy 
from table_product_x 
union all 
select 'product_y' as TableName, yyy 
from table_product_y
Другие вопросы по тегам