能否使用系统查询来检索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
.
你需要用动态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;