动态说明从哪个 table 名称到 SELECT 来自

Dynamically stating FROM which table name to SELECT from

是否可以使用系统查询检索 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 将 return 一个字符串,然后可以将其转换为有效的 Tables.Name

为此您需要动态 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;