如果存在,如何从表中删除列

时间:2015-05-18 16:02:54

标签: mysql sql stored-procedures

这是我正在使用的查询:

IF  EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME =( N'CustomerVariable1Value'))
begin Alter table temp.DIM_BE_ACCOUNT  drop column CustomerVariable1Value

第一次工作正常,但是当我再次运行时,它显示错误。 如何使其无错误并执行多次?

错误讯息:

ALTER TABLE DROP COLUMN failed because column 'CustomerVariable1Value' does not exist in table 'DIM_BE_ACCOUNT'.

2 个答案:

答案 0 :(得分:2)

您只是在整个MySQL实例中的所有列名中查找列名。您还需要按模式(=数据库)和表名称进行过滤:

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = N'CustomerVariable1Value' AND TABLE_NAME = 'MyTableName' AND TABLE_SCHEMA = 'MyDatabase')

答案 1 :(得分:0)

这是一个不涉及查询INFORMATION_SCHEMA的解决方案,如果列不存在,它只会忽略错误。

DROP PROCEDURE IF EXISTS `?`;
DELIMITER //
CREATE PROCEDURE `?`
(
)
BEGIN
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
  ALTER TABLE `table_name` DROP COLUMN `column_name`;
END //
DELIMITER ;
CALL `?`();
DROP PROCEDURE `?`;

P.S。随意给它别的名字,而不是?

相关问题