MySQL-存储过程中的Alter表语法

MySQL-存储过程中的Alter表语法,mysql,stored-procedures,parameter-passing,alter-table,Mysql,Stored Procedures,Parameter Passing,Alter Table,我创建了一个存储过程来更改列名,如下所示 表结构: CREATE TABLE``procedurecheck``( ``id``int(10)非空自动增量, ``colname``varchar(50)不为空, ``proccheck1``varchar(50)不为空, 主键(`id``) )ENGINE=InnoDB默认字符集=latin1 这是一个仅用于检查程序的测试代码。 DELIMITER $$ CREATE PROCEDURE updateColumn(IN COLNAME varch

我创建了一个存储过程来更改列名,如下所示

表结构:

CREATE TABLE``procedurecheck``(
``id``int(10)非空自动增量,
``colname``varchar(50)不为空,
``proccheck1``varchar(50)不为空,
主键(`id``)
)ENGINE=InnoDB默认字符集=latin1

这是一个仅用于检查程序的测试代码。

DELIMITER $$
CREATE PROCEDURE updateColumn(IN COLNAME varchar (50), IN NEWCOLNAME varchar (50))
BEGIN
  SET @ddl = CONCAT('alter table procedurecheck CHANGE (', COLNAME, ' ', NEWCOLNAME, ' VARCHAR(50) NOT NULL)');
  PREPARE STMT FROM @ddl;
  EXECUTE STMT;
END $$
DELIMITER ;
当我使用以下命令调用此函数时:

调用updateColumn('proccheck','newproccheck')

我得到一个错误,如下所示:

#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解第1行的near'(proccheck newproccheck VARCHAR(50)NOT NULL)的正确语法

任何指示都会有帮助

谢谢

删除
()
,例如

CONCAT('alter table procedurecheck CHANGE ', COLNAME, ' ', NEWCOLNAME, ' VARCHAR(50) NOT NULL');

您可以尝试此存储过程:

DROP PROCEDURE IF EXISTS pl_alterColumnName;
DELIMITER $$
CREATE PROCEDURE pl_alterColumnName(IN tblName varchar (50), IN COLNAME varchar (50), IN NEWCOLNAME varchar (50))
BEGIN
  SET @ddl = CONCAT(' alter table ', tblName  ,' CHANGE ', COLNAME, ' ', NEWCOLNAME, ' VARCHAR(50) NOT NULL');
  PREPARE STMT FROM @ddl;
  EXECUTE STMT;
END $$
DELIMITER ;
删除过程(如果存在)pl_updateColumnName; 分隔符$$ 创建过程pl_updateColumnName(在tblName varchar(50)、COLNAME varchar(50)、NEWCOLNAME varchar(50)) 开始 SET@ddl=CONCAT('alter table',tblName',CHANGE',COLNAME',NEWCOLNAME',VARCHAR(50)NOT NULL'); 从@ddl准备STMT; 执行STMT; 结束$$ 定界符;
删除
()
,例如
CONCAT('alter table procedurecheck CHANGE',COLNAME',NEWCOLNAME',VARCHAR(50)NOT NULL')非常感谢@JW웃. 效果很好。请把那个作为答案,以便我能接受。
DROP PROCEDURE IF EXISTS pl_updateColumnName;
DELIMITER $$
CREATE PROCEDURE pl_updateColumnName(IN tblName varchar (50), IN COLNAME varchar (50), IN NEWCOLNAME varchar (50))
BEGIN
  SET @ddl = CONCAT(' alter table ', tblName  ,' CHANGE ', COLNAME, ' ', NEWCOLNAME, ' VARCHAR(50) NOT NULL');
  PREPARE STMT FROM @ddl;
  EXECUTE STMT;
END $$
DELIMITER ;