2015-05-18 6 views
0

Это запрос, я использую:как удалить столбец из таблицы, если существует

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'. 
+0

«это запрос, который я использую: он работает отлично в первый раз, но когда я снова запускаю, он показывает ошибку» - это вполне ожидаемо. Первый запуск удаляет столбец. Следовательно - >> "не удалось, потому что столбец CustomerVariable1Value не существует в таблице 'DIM_BE_ACCOUNT'." –

+1

Возможный дубликат [Синтаксис MySQL Alter для удаления столбца, если он существует] (http://stackoverflow.com/questions/173814/mysql-alter-syntax-to-drop-a-column-if-it-exists) –

+0

Как насчет добавления else и выхода? – BrianAtkins

ответ

0

Вы ищете только имя столбца из всех имен столбцов в целом, например MySQL. Вы должны также фильтровать по схеме (= базы данных) и имена таблиц:

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = N'CustomerVariable1Value' AND TABLE_NAME = 'MyTableName' AND TABLE_SCHEMA = 'MyDatabase') 
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. Не стесняйтесь давать ему другое имя, а не ?

Смежные вопросы