Tip & Tech

모든 데이터 베이스 공통 테이블 존재여부 체크쿼리이다. 

ISO 표준을 따르는 모든 데이터베이스는 information_schema 라는 스키마를 만들어야 하고 그에 따른 VIEW 들을 쿼리할수 있게 만들어야 한다. 

따라서 oracle, mysql 등과 호환되는 스크립트를 만들어야 할 경우 information_schema 소유의 뷰들을 이용하여 존재여부를 체크하여야 한다.

 
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='mytablename') 
DROP TABLE mytablename
 

Sql server 에서만 사용할수 있는 테이블 존재여부 체크 쿼리이다. 

SQL Server 버전에 관계없이 사용할수 있는 함수를 이용한 존재 여부 체크


구문

 
IF OBJECT_ID('YourObject', 'ObjectsType') IS NOT NULL 
DROP <ObjectsType> 
 


테이블 존재 체크 예시

 
IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL
DROP TABLE mytablename; 
 


함수 존재 체크 예시

 
IF OBJECT_ID (N'myfunction', N'FN') IS NOT NULL
DROP FUNCTION myfunction; 
 


프로시져 존재 체크 예시

 
IF OBJECT_ID (N'myproc', N'P') IS NOT NULL
DROP PROCEDURE myproc; 
 


Object_id 함수에서 사용할수 있는 SQL Server 버전별 Objectstype

Object type (sys.objects.type)Object Description2000200520082012 이상2016 이상
       
AFAggregate function (CLR) xxxx
CCHECK constraintxxxxx
DDEFAULT (constraint or stand-alone)xxxxx
FFOREIGN KEY constraintxxxxx
FNSQL scalar functionxxxxx
FSAssembly (CLR) scalar function xxxx
FTAssembly (CLR) table-valued function xxxx
IFSQL inline table-valued functionxxxxx
ITInternal table xxxx
PSQL stored procedurexxxxx
PCAssembly (CLR) stored procedure xxxx
PGPlan guide  xxx
PKPRIMARY KEY constraintxxxxx
RRule (old-style, stand-alone) xxxx
RFReplication-filter-procedure xxxx
SSystem base tablexxxxx
SNSynonym xxxx
SOSequence Object   xx
SQService queue  xxx
TAAssembly (CLR) DML trigger xxxx
TFSQL table-valued-functionxxxxx
TRSQL DML triggerxxxxx
TTTable type   xx
UTable (user-defined)xxxxx
UQUNIQUE constraintxxxxx
VViewxxxxx
XExtended stored procedure   xx
ETExternal Table    x


테이블 쿼리를 이용한 존재 여부 체크


SQL Server 2000 버전 이하 

 
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id (N'[dbo].[IsSomething]') AND OBJECTPROPERTY(id, N'IsFunction') = 1)
 


SQL Server 2005 버전 이상

 
IF EXISTS (SELECT * FROM sys.objects WHERE id = object_id (N'[dbo].[IsSomething]') AND OBJECTPROPERTY(id, N'IsFunction') = 1) 
 


Objectproperty 에 사용할 수 있는 property 는 이 링크를 참조 (https://docs.microsoft.com/ko-kr/sql/t-sql/functions/objectproperty-transact-sql?view=sql-server-2017)