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 ;