将mysql数据库中表的所有列更改为大写
我使用上面的代码将列名转换为大写,但代码在CONCAT'ALTER TABLE',tblname',CHANGE column',oldname',@newname'中给出了错误160442000。有人能帮我解决这个问题吗 先发制人将mysql数据库中表的所有列更改为大写,mysql,ubuntu-14.04,Mysql,Ubuntu 14.04,我使用上面的代码将列名转换为大写,但代码在CONCAT'ALTER TABLE',tblname',CHANGE column',oldname',@newname'中给出了错误160442000。有人能帮我解决这个问题吗 先发制人 DELIMITER // DROP PROCEDURE IF EXISTS uppercasecol // CREATE PROCEDURE uppercasecol(IN tblname VARCHAR(200)) BEGIN DECLARE done
DELIMITER //
DROP PROCEDURE IF EXISTS uppercasecol //
CREATE PROCEDURE uppercasecol(IN tblname VARCHAR(200))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE oldname VARCHAR(200);
DECLARE cur CURSOR FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='ADM01' AND TABLE_NAME=tblname;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO oldname;
SET @newname = UPPER(oldname);
#IF newname equals to oldname, do nothing;
#select 'a' <> 'A'; -> 0
#select 'a' <> BINARY 'A'; -> 1
SET @isNotSame = @newname <> BINARY oldname;
IF NOT done && @isNotSame THEN
SET @SQL = CONCAT('ALTER TABLE `',tblname,'` CHANGE COLUMN `',oldname,'` @newname');
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
DEALLOCATE PREPARE tmpstmt;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END //
DELIMITER ;
CALL uppercasecol('USER_MODULE');
试试这个
试试这个
ALTER TABLE `tablename` CHANGE COLUMN `oldname` `newname` datatype(size) NOT NULL;
试试这个
ALTER TABLE `tablename` CHANGE COLUMN `oldname` `newname` datatype(size) NOT NULL;