动态说明要从哪个表名中SELECT的FROM。

问题描述 投票:0回答:1

能否使用系统查询来检索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 sql-server tsql select dynamic-sql
1个回答
2
投票

你需要用动态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;
© www.soinside.com 2019 - 2024. All rights reserved.