2009-02-13 52 views
3

这里是我想什么MySQL的做...我越来越觉得这根本就不是可行的,但会爱错了......是否有可能通过存储过程更改mySql中的表?

create procedure foo(IN MYTABLE varchar(50) , IN COLNAME varchar (50), IN MYTYPE varchar(50)) 
begin 
IF (select count(*) from information_schema.columns where table_name =MYTABLE and column_name = COLNAME) = 0 
THEN 
alter table MYTABLE add column MYNAME MYTYPE; 
end; 

call foo('table_foo' , 'column_bar' , 'varchar(100)'); 

回答

6

不知道为什么地球你想要它,但它是可能的:

DELIMITER // 
DROP PROCEDURE foo// 
CREATE PROCEDURE foo(IN MYTABLE varchar(50) , IN COLNAME varchar (50), IN MYTYPE varchar(50)) 
BEGIN 
    SET @ddl = CONCAT('alter table ', MYTABLE, ' add column (', COLNAME, ' ', MYTYPE, ')'); 
    PREPARE STMT FROM @ddl; 
    EXECUTE STMT; 
END; 
// 
+0

哇,谈谈SQL注入! – Randolpho 2009-02-13 22:06:43

2

为什么我会这样做的简短答案。

当您的模式版本在发布的产品中发生更改时更新部署的数据库。对于跨平台代码来说,Shell脚本是一个不错的选择,所以SQL中的脚本编写非常好,只需记住在使用后删除这些过程。如果我已经部署了1.1版本,但在更新时是1.4,我只需运行1.1-> 1.2,1.2-> 1.3和1.3-> 1.4脚本。

相关问题