Ошибка синтаксиса SQL - PullRequest
       6

Ошибка синтаксиса SQL

1 голос
/ 30 ноября 2010

Я пытаюсь выполнить этот запрос:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns 
WHERE table_name = 'MyTableName' AND column_name = 'ColumnInQuestion')
THEN ALTER TABLE MyTableName DROP COLUMN ColumnInQuestion;

И я получаю следующее сообщение об ошибке:

В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который можно использовать рядом с «ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ * ОТ ИНФОРМАЦИИ_СЧЕМА.MySQL 5.1.что-то, так что я не думаю, что информационная схема не определена, это проблема. Есть идеи?

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 30 ноября 2010

Вы не можете сделать это.IF EXISTS имеет смысл только для создания таблиц / баз данных

Если вам нужно удалить столбец, если он существует - вы можете использовать

ALTER IGNORE TABLE DROP COLUMN ...

Примечание на IGNORE.

0 голосов
/ 30 ноября 2010

У вас есть несколько вариантов.

Один из вариантов - просто запустить команду ALTER TABLE и игнорировать ошибку, если столбец не существует.

Другой вариант, более близкий по духу к вашей первоначальной попытке, состоит в том, чтобы условно вывести DDL в сценарий SQL на диске, если столбец существует, а затем создать этот сценарий SQL для запуска DDL (если есть).

Вот пример:

-- delete the SQL script if it exists
\! rm /tmp/drop_column.sql

-- Conditionally dump the DDL to a SQL script if the column exists
SELECT concat('ALTER TABLE ',table_schema,'.',table_name,
' DROP COLUMN ',column_name,';') as sql_stmt
into outfile '/tmp/drop_column.sql'
FROM INFORMATION_SCHEMA.columns 
WHERE table_name = 'MyTableName' AND column_name = 'ColumnInQuestion';

-- execute the SQL script
\. /tmp/drop_column.sql

-- delete the SQL script from disk
\! rm /tmp/drop_column.sql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...