0

嘿,假设我们有 3 个表 tbl1,tbl2,tbl3 并使用以下查询您可以查看数据

    select * from tbl1
    select * from tbl2
    select * from tbl3

我的问题是你可以通过使用变量来消除重复吗?例如

    DECLARE @x as varchar(60)
    set @x = tbl1
    set @x = tbl2
    set @x = tbl3
    select * from @x
    Go

我讨厌重新输入确切的查询是否有人知道使查询工作的方法我认为这会节省我大量的时间。谢谢

4

3 回答 3

1

如果您指的是 MySQL 中的Dynamic SQL (SQL Server)类型的支持,您可以在存储过程中使用 prepare 语句来实现这一点

首先创建一个带有参数的存储过程,以字符串形式获取表名:

DELIMITER ///

CREATE PROCEDURE SelectAllRecords(__TABLE__NAME varchar(255))
BEGIN
    SET @sql = CONCAT('SELECT * FROM ', __TABLE__NAME);

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END///

DELIMITER ;

接下来,您可以调用表名中发送的存储过程:

call SelectAllRecords('table1')
call SelectAllRecords('table2')
call SelectAllRecords('table3')
于 2013-10-04T11:45:55.703 回答
1

为什么不为此创建一个stored procedure

例子:

DELIMITER $$

DROP PROCEDURE IF EXISTS `selectAllTables`$$

CREATE PROCEDURE `selectAllTables`()
BEGIN
SELECT * from tbl1;
SELECT * from tbl2;
SELECT * from tbl3;
END$$

DELIMITER ;

用法:

CALL `selectAllTables`();
于 2013-10-04T10:47:10.947 回答
0

如果我的问题正确,那么下面的查询将为您工作。

DECLARE @x as table
set @x = select * from tbl3
select * from @x
Go
于 2013-10-04T10:47:19.413 回答