2010-11-30 4 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 구문에 오류가 있습니다를; 라인 1

의 기사 ''내가 MySQL을 5.1을 사용하고 근처에 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 'TABLE_NAME =이 WHERE있는 경우을 (INFORMATION_SCHEMA.COLUMNS SELECT * FROM'. 뭔가, 내가 INFORMATION_SCHEMA는 문제가 정의되지 않은 생각하지 않습니다. 어떤 아이디어?

여러분의 도움에 감사드립니다!

+0

: 여기

은 예입니다? –

+0

@OMG 조랑말 : 조카가 어떻게 달려도 상관 없습니다. 이 쿼리에서 mysql은 DDL 문맥에서 DML'IF'를 사용하려고 시도합니다 (적어도 그렇게 생각합니다). 문서에 따르면 이러한 조건부 DDL을 작성할 수는 없습니다. – zerkms

답변

2

당신은이 작업을 수행 할 수 없습니다. IF EXISTS 의미 만 테이블/데이터베이스를 만들기위한

열을 삭제해야하는 경우 if 존재할 수 있습니다 -

ALTER IGNORE TABLE DROP COLUMN ... 

IGNORE에 대한 참고 사항.

0

몇 가지 옵션이 있습니다.

하나의 옵션은 ALTER TABLE 명령을 실행하고 해당 열이 없으면 오류를 무시하는 것입니다.

원래 시도에 더 근접한 또 다른 옵션은 열이있는 경우 조건부로 디스크의 SQL 스크립트에 DDL을 덤프 한 다음 해당 DDL을 실행할 SQL 스크립트 원본을 제공하는 것입니다. 어떻게 쿼리를 실행하려고

-- 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