我正在创建一个在mysql中备份表的过程。
我的代码是:
DELIMITER $$
CREATE PROCEDURE `backup_table`(current_name VARCHAR(50), backup_name VARCHAR(50))
BEGIN
CREATE TABLE `@backup_name` LIKE `@current_name`;
INSERT INTO `@backup_name` SELECT * FROM `@current_name`;
END $$
DELIMITER;
CALL backup_table('users', 'users_bak');
程序已成功创建但当我尝试使用我的表名作为参数调用该过程时,它会抛出错误:
Query : call backup_table('users', 'users_bak')
Error Code : 1146
Table 'database.@current_name' doesn't exist
我已经使用了没有@符号的程序,但没有工作。
那么,请告诉我,如何在查询中使用参数变量作为表名。 请帮帮我们!!!!
答案 0 :(得分:0)
谢谢大家!
我已经在@ wchiquito对sql prepare语句的帮助评论的帮助下自己解决了我的问题。
见下面的代码:
DELIMITER //
CREATE PROCEDURE `backup_table`(current_name VARCHAR(50), backup_name VARCHAR(50))
BEGIN
SET @ct = CONCAT('CREATE TABLE ', backup_name, ' LIKE ', current_name);
SET @it = CONCAT('INSERT INTO ', backup_name, ' SELECT * FROM ', current_name);
PREPARE create_t FROM @ct;
EXECUTE create_t;
PREPARE insert_t FROM @it;
EXECUTE insert_t;
END;
CALL backup_table('users', 'users_bak');
我发布的答案是因为, 也许这会对另一个人有帮助!!!