我正在尝试创建一个存储过程来更改现有表的名称,方法是将日期附加到表中。
我使用MySQL的时间很短,不明白为什么代码不能工作。我正在使用MySQL Workbench 8.0社区连接到MySQL数据库并运行代码。在Workbench中,当我运行代码时不会返回任何错误。
到目前为止,我设法找到的代码是:
DELIMITER \\
DROP PROCEDURE IF EXISTS `usp_test_dynamic_sql`\\
CREATE PROCEDURE `usp_test_dynamic_sql`()
BEGIN
SET @s = concat('ALTER TABLE MyDashboardTable RENAME TO MyDashboardTable_',replace(date(now()),'-',''));
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
END\\
DELIMITER ;我已经运行了部分代码,通过运行以下命令来查看@s被设置为什么:
SET @s = concat('ALTER TABLE MyDashboardTable RENAME TO MyDashboardTable_',replace(date(now()),'-',''));
select @s;然后,我粘贴了@s的结果
ALTER TABLE MyDashboardTable RENAME TO MyDashboardTable_20200904这确实会改变表的名称,但是我不明白为什么存储过程不会改变。任何帮助都将不胜感激。
发布于 2020-09-04 23:20:20
以下列身份执行SP
CALL usp_test_dynamic_sql();您可能还想修改您的
replace(date(now()),'-','')使用
DATE_FORMAT(NOW(),'%Y%m%d')即使这不是绝对必要的。如果这样做,请不要在格式之间保留空格或使用'-‘或'/’,因为MySQL会抛出错误。
https://stackoverflow.com/questions/63741719
复制相似问题