2010-11-30 104 views
1

我試圖執行這個查詢:SQL語法錯誤

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

我也得到了以下錯誤消息:

您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的正確語法手冊文章「‘在1號線

我使用的MySQL 5.1’IF EXISTS(WHERE TABLE_NAME = SELECT * FROM INFORMATION_SCHEMA.COLUMNS」。東西,所以我不認爲INFORMATION_SCHEMA沒有被定義爲這個問題。任何想法?

謝謝您的幫助!

+0

你是如何試圖運行查詢? – 2010-11-30 02:02:27

回答

2

你不能做到這一點。IF EXISTS是有意義的,只是用於創建表/數據庫

如果您需要刪除列它存在 - 您可以使用

ALTER IGNORE TABLE DROP COLUMN ... 

關於IGNORE的注意事項。

0

您有幾個選項。

一種選擇是隻運行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