Динамическое указание ОТ какого имени таблицы выбрать из - PullRequest
0 голосов
/ 23 апреля 2020

Можно ли использовать системный запрос для получения имени TABLE, а затем SELECT * FROM that TABLE name. Вдоль строк:

SELECT * FROM CAST (( SELECT TOP 1 t.Name 
                      FROM sys.tables t 
                      JOIN sys.columns c ON c.OBJECT_ID = t.OBJECT_ID 
                      WHERE c.NAME = 'SomeColumnID' )  AS sys.tables ) 

В настоящее время проблема заключается в том, что SELECT TOP 1 t.Name вернет строку и может быть затем преобразована в действительный Tables.Name.

1 Ответ

2 голосов
/ 23 апреля 2020

Для этого вам понадобится Dynami c sql: то есть создайте строку запроса из запроса, а затем выполните ее с sp_executesql.

Для вашего варианта использования это будет выглядеть так:

declare @q nvarchar(max);

select top (1) @q = N'select * from ' + t.name 
from sys.tables t 
join sys.columns c on c.object_id = t.object_id 
where c.name = 'SomeColumnID'

-- debuug the query
select @q sql;

-- execute the query
execute sp_executesql @q;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...