我自己写的一个SP过程。DELIMITER $$USE `gn`$$DROP PROCEDURE IF EXISTS `USP_ASS_RenameAndCreateTable`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `USP_ASS_RenameAndCreateTable`($NowTableName VARCHAR(100),$HistoryTableName VARCHAR(100))
BEGIN
#预先删除
BEGIN
SET @DropTable = CONCAT('DROP TABLE IF EXISTS ',$HistoryTableName,';');
PREPARE DropTable FROM @DropTable; 
EXECUTE DropTable;
END;
#改名
BEGIN
SET @RenameTable = CONCAT('RENAME TABLE ',$NowTableName,' TO ',$HistoryTableName,';');
PREPARE RenameTable FROM @RenameTable; 
EXECUTE RenameTable;
END;
#重建表
BEGIN
SET @CreateTable = CONCAT('CREATE TABLE ',$NowTableName,' SELECT * FROM ',$HistoryTableName,' WHERE 1=2;');
PREPARE CreateTable FROM @CreateTable; 
EXECUTE CreateTable;
END;
END$$DELIMITER ;这个过程放在一个大的存储过程中调用,单独运行没什么问题,但大的存储过程中包含了几个类似的过程,然后就产生下面的错误:Error Code : 7
Error on rename of '.\gn\××××××' to '.\gn\#sql2-4e0-1.frm' (Errcode: 13)怎么会出现红字部分的改名?我并没有指定类似名字。

解决方案 »

  1.   

    红色部分是改名过程中出现的中间定义mysql在更改过程中,会保留一定数量的表定义的ps:之前试过在存储过程里嵌套调用"循环更改视图增加列"也出现这样的情况现在也还没弄懂其中原理,只跟踪到其中会保留一定数量的视图更改名你可以去gn目录下打开类似“#sql2-4e0-1.frm' ”这样的定义文件看看吧