动态说明从哪个 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;
是否可以使用系统查询检索 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;