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没有被定义为这个问题。任何想法?
谢谢您的帮助!
答
你不能做到这一点。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
你是如何试图运行查询? – 2010-11-30 02:02:27