Computer/Databases
[MSSQL] IF NOT EXISTS 활용
인생이글케쉬우냐
2010. 1. 7. 13:58
매번 실서버에 디비의 변경된 스키마가 적용됐는지 확인하려면 컬럼을 존재하는지 일일히 select날려 체크하고 있으면 냅두고 없으면 alter해주곤했었다.
근데 if not exists를 이용하면 더 간단히 할 수 있다는걸 알았다.
[이전에 내가 사용했던 방식]
[if not exists 사용]
프로시저나 펑션의 경우도 같은 방법으로 사용가능하며,
컬럼의 내용을 업데이트하거나 인서트할때는 아래 와 같이 사용하면된다.
[참조 : http://blog.naver.com/pythonist?Redirect=Log&logNo=20086222891]
근데 if not exists를 이용하면 더 간단히 할 수 있다는걸 알았다.
[이전에 내가 사용했던 방식]
SELECT TOP 1 GPS_ACCURACY FROM TB_TRACKER; ALTER TABLE TB_TRACKER ADD GPS_ACCURACY INT NOT NULL CONSTRAINT DF_TB_TRACKER_GPS_ACCURACY DEFAULT (0);
[if not exists 사용]
-- 1. 컬럼 IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TB_TRACKER' AND COLUMN_NAME='GPS_ACCURACY') ALTER TABLE TB_TRACKER ADD GPS_ACCURACY INT NOT NULL CONSTRAINT DF_TB_TRACKER_GPS_ACCURACY DEFAULT (0) GO -- 2. 테이블 IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='TB_FAV_ADDRESS') CREATE TABLE TB_FAV_ADDRESS ( ADDRESS_ID DECIMAL(18, 0) IDENTITY(1,1) NOT NULL PRIMARY KEY, ADDRESS_NM VARCHAR(255) NOT NULL, ADDRESS VARCHAR(255) NULL, LAT_NO REAL, LON_NO REAL, DESCRIPTION VARCHAR(255), OPT_DISPLAY_MS BIT NOT NULL DEFAULT(0), USER_ID DECIMAL(18, 0) NOT NULL ) GO -- 3. 컬럼 추가 후 업데이트 할 경우, IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TB_TRACKER' AND COLUMN_NAME='MDATE_DT') BEGIN DECLARE @SQL VARCHAR(2000); SET @SQL = 'ALTER TABLE TB_TRACKER ADD MDATE_DT DATETIME NOT NULL DEFAULT GETDATE()'; EXEC(@SQL); SET @SQL = 'UPDATE TB_TRACKER SET MDATE_DT = CDATE_DT'; EXEC(@SQL); END GO -- 3-1. 컬럼 추가후 업데이트 여러쿼리 할경우, IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TB_CODE' AND COLUMN_NAME='CODE_IMG') BEGIN DECLARE @SQL VARCHAR(2000); SET @SQL = 'ALTER TABLE TB_CODE ADD CODE_IMG VARCHAR(255) DEFAULT ('''');'; EXEC(@SQL); SET @SQL = 'UPDATE TB_CODE SET CODE_IMG = '''';'; EXEC(@SQL); SET @SQL = 'UPDATE TB_CODE SET CODE_IMG=''event/journeystart.gif'' WHERE CODE_GRP_ID = ''C005'' AND CODE_ID=''11''; UPDATE TB_CODE SET CODE_IMG=''event/geofencein.gif'' WHERE CODE_GRP_ID = ''C005'' AND (CODE_ID>=''40'' AND CODE_ID<=''49''); UPDATE TB_CODE SET CODE_IMG=''event/evt_redlighton.gif'' WHERE CODE_GRP_ID = ''C005'' AND CODE_ID=''85''; -- for tracker UPDATE TB_CODE SET CODE_IMG=''tracker/''+CODE_ID+''_eB_h00.png'' WHERE CODE_GRP_ID = ''C051'';' EXEC(@SQL); END GO
프로시저나 펑션의 경우도 같은 방법으로 사용가능하며,
컬럼의 내용을 업데이트하거나 인서트할때는 아래 와 같이 사용하면된다.
UPDATE TB_CODE_GRP SET CODE_GRP_GE='Device Sub Type' WHERE CODE_GRP_ID='C043' IF @@ROWCOUNT=0 INSERT INTO TB_CODE_GRP (CODE_GRP_ID, CODE_GRP_GE) VALUES ('C043', 'Device Sub Type'); GO
[참조 : http://blog.naver.com/pythonist?Redirect=Log&logNo=20086222891]
반응형