7

我有一个表tbl1,其中有一列tbl_names。此列包含一些其他表的名称。
现在我想用以下格式编写一个查询:
select * from (select tbl_names from tbl1)

我知道上面的查询不起作用,但我怎么能做到这一点?我是否需要编写一个存储过程或类似的东西并循环第二个查询的每个值并执行第一个查询?

谢谢

4

3 回答 3

7

您可以使用准备好的语句

SET @a = (select tbl_names from tbl1);
SET @x := CONCAT('SELECT * FROM ', @a);
Prepare stmt FROM @x;
Execute stmt;
DEALLOCATE PREPARE stmt;

准备语法

干杯。

于 2013-10-22T06:34:35.313 回答
0

您需要使用一些动态 SQL。使用要执行的查询构建 SQL 字符串,然后调用exec(@sql)

完整示例:

declare cur cursor for
select tbl_names from tbl1

declare @sql varchar(100), @tbl varchar(100)

open cur

fetch cur into @tbl

while @@FETCH_STATUS = 0 begin
    set @sql = 'select * from ' + @tbl
    exec(@sql)
    fetch cur into @tbl
end

close cur
deallocate cur
于 2013-10-22T08:18:12.007 回答
-1

只需在子查询中添加一个假名:

select * from (select tbl_names from tbl1) a;

祝你好运 )

于 2013-10-22T07:29:05.523 回答