【发布时间】:2015-07-30 09:43:24
【问题描述】:
我需要重命名数据库中所有表的列。 我可以使用此查询获取列列表:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME= <Column Name>;
但实际上我怎么能尽可能简单地重命名它而不写
ALTER TABLE <Table Name >RENAME COLUMN <Old name> to <New Name>;
对于每个表。
我试着写了一个程序:
DELIMITER $$
DROP PROCEDURE IF EXISTS renameColumn $$
CREATE PROCEDURE renameColumn(IN oldName tinytext, IN newName tinytext)
BEGIN
DECLARE @name VARCHAR(255);
DECLARE exit_loop BOOLEAN;
DECLARE tableName_cursor CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME=oldName;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE;
OPEN tableName_cursor;
rename_loop: LOOP
FETCH tableName_cursor @name;
ALTER TABLE @name RENAME COLUMN oldName to newName;
IF exit_loop THEN
LEAVE rename_loop;
END IF;
END LOOP rename_loop;
END $$
DELIMITER;
但我有以下错误: 您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 '@name VARCHAR(255); 附近使用的正确语法;
DECLARE exit_loop BOOLEAN;
在第 3 行声明 ta'
你能帮我解决这个问题吗
【问题讨论】:
-
也许导出架构。查找/替换列名。导入架构。
-
查看stored-procedure-to-add-remove-prefix-by-rename-table-mysql 了解类似的动态重命名示例
标签: mysql sql stored-procedures