[SQL] 하지 존재하는 경우 열을 추가 MYSQL
SQL하지 존재하는 경우 열을 추가 MYSQL
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'email_subscription' AND COLUMN_NAME = 'subscribe_all')
THEN
ALTER TABLE email_subscription
ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1,
ADD COLUMN subscribe_category varchar(512) DEFAULT NULL;
나는 예 엄청난 양의에보고했다. 하지만이 쿼리, 나는의 오류가없는 일 가지고 않습니다
해결법
-
==============================
1.당신은 쿼리에 대한 프로 시저를 만들 수 있습니다
당신은 쿼리에 대한 프로 시저를 만들 수 있습니다
DELIMITER $$ CREATE PROCEDURE Alter_Table() BEGIN DECLARE _count INT; SET _count = ( SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'email_subscription' AND COLUMN_NAME = 'subscribe_all'); IF _count = 0 THEN ALTER TABLE email_subscription ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1, ADD COLUMN subscribe_category varchar(512) DEFAULT NULL; END IF; END $$ DELIMITER ;
-
==============================
2.호스트는 당신이 만들거나 절차를 실행할 수있는 권한을 부여하지 않는 경우, 나는 준비 / 사용해서 실행하고 스키마를 쿼리이 작업을 수행하는 다른 방법을 찾은 것 같아요 :
호스트는 당신이 만들거나 절차를 실행할 수있는 권한을 부여하지 않는 경우, 나는 준비 / 사용해서 실행하고 스키마를 쿼리이 작업을 수행하는 다른 방법을 찾은 것 같아요 :
SET @s = (SELECT IF( (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'table_name' AND table_schema = DATABASE() AND column_name = 'col_name' ) > 0, "SELECT 1", "ALTER TABLE table_name ADD col_name VARCHAR(100)" )); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-
==============================
3.하나의 MySQL의 문이를 달성하기 위해 상응하는 구문은 없습니다.
하나의 MySQL의 문이를 달성하기 위해 상응하는 구문은 없습니다.
비슷한하려면 다음 중 하나를 수행 할 수 있습니다
1) ALTER TABLE과 열을 추가하려고, 그 이름의 열이 이미 테이블에 존재하는 경우 MySQL은 오류를 발생하게하거나,
2) INFORMATION_SCHEMA.COLUMNS 그 이름의 열이 테이블에 존재하는지 확인하기 위해 볼 쿼리.
당신이 정말로 테이블 _뿐만 아니라의 TABLE_SCHEMA을 위해 확인해야 할 것을 참고 :
SELECT column_name FROM information_schema.columns WHERE table_schema = 'foo' AND table_name = 'email_subscription' AND column_name = 'subscribe_all'
그 바탕으로 ALTER 표를 실행할지 여부를 결정
-
==============================
4.당신은 MySQL의에서 MS SQL 서버 구문을 사용하고 있습니다.
당신은 MySQL의에서 MS SQL 서버 구문을 사용하고 있습니다.
-
==============================
5.또한 열 존재를 확인하기 위해 데이터베이스 이름에 대한 조건을 추가 할 수 있습니다.
또한 열 존재를 확인하기 위해 데이터베이스 이름에 대한 조건을 추가 할 수 있습니다.
이 시도:
DELIMITER $$ CREATE PROCEDURE sp_AlterTable() BEGIN IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'dbName' AND TABLE_NAME = 'email_subscription' AND COLUMN_NAME = 'subscribe_all') THEN ALTER TABLE email_subscription ADD COLUMN subscribe_all TINYINT(1) DEFAULT 1, ADD COLUMN subscribe_category VARCHAR(512) DEFAULT NULL; END IF; END $$ DELIMITER ;
-
==============================
6.
SET @s = (SELECT IF( (SELECT COUNT(column_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'oc_bitcoin_wallets_receive' AND table_schema = 'k_opencart2' AND column_name = 'test3' ) > 0, "SELECT 1", "ALTER TABLE `oc_bitcoin_wallets_receive` ADD COLUMN `test3` INT NOT NULL AFTER `test2`;" )); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
편집을 위해 값 : oc_bitcoin_wallets_receive - 테이블 이름, k_opencart2 - 데이터베이스 이름, TEST3 - 새로운 열의 이름, oc_bitcoin_wallets_receive - 두 번째 위치 테이블 TEST3 - 2 위치 칼럼 TEST2 - 새로운 열 전에 열 이름입니다.
from https://stackoverflow.com/questions/14381895/mysql-add-column-if-not-exist by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQLite는의 IF () 문의 대안 (0) | 2020.07.02 |
---|---|
[SQL] sp_executesql에 차이 대 저장 프로 시저의 EXEC? (0) | 2020.07.02 |
[SQL] SQL Server 2008의 복합 외래 키 만들기 (0) | 2020.07.02 |
[SQL] 어떻게 jDBI에서의 쿼리 할까? (0) | 2020.07.02 |
[SQL] 어떻게 T-SQL에서 제로 패딩 문자열로 int를 변환합니까? (0) | 2020.07.02 |