SQL语法错误

问题描述:

我试图执行这个查询: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

你不能做到这一点。IF EXISTS是有意义的,只是用于创建表/数据库

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

ALTER IGNORE TABLE DROP COLUMN ... 

关于IGNORE的注意事项。

您有几个选项。

一种选择是只运行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