2013-06-24 26 views
-1

我创建了一个存储过程来更改列名称,如下所示。MySQL - 修改存储过程中的表格语法

表结构:

CREATE TABLE ``procedurecheck`` ( ``id`` int(10) NOT NULL AUTO_INCREMENT, ``colname`` varchar(50) NOT NULL, ``proccheck1`` varchar(50) NOT NULL, PRIMARY KEY (``id``) ) ENGINE=InnoDB DEFAULT CHARSET=latin1

This is a test code only to check procedures.

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 ; 

当我打电话使用此功能:

CALL updateColumn('proccheck','newproccheck');

我得到一个错误的follws:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(proccheck newproccheck VARCHAR(50) NOT NULL)' at line 1

任何指针都会有帮助。

谢谢

+0

删除'()',如。 'CONCAT('alter table procedurecheck CHANGE',COLNAME,'',NEWCOLNAME,'VARCHAR(50)NOT NULL');' –

+0

让我试试。 –

+1

非常感谢@JW웃。它效果很好。请把它作为答案,以便我可以接受它。 –

回答

1

删除(),例如。

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

你可以试试这个存储过程:

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 ; 
0
 
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 ;