SQL Server 에서 객체 존재여부 체크(테이블, 함수, 프로시져등)
SQL Server2019. 2. 9. 07:13
모든 데이터 베이스 공통 테이블 존재여부 체크쿼리이다.
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 Description | 2000 | 2005 | 2008 | 2012 이상 | 2016 이상 |
AF | Aggregate function (CLR) | x | x | x | x | |
C | CHECK constraint | x | x | x | x | x |
D | DEFAULT (constraint or stand-alone) | x | x | x | x | x |
F | FOREIGN KEY constraint | x | x | x | x | x |
FN | SQL scalar function | x | x | x | x | x |
FS | Assembly (CLR) scalar function | x | x | x | x | |
FT | Assembly (CLR) table-valued function | x | x | x | x | |
IF | SQL inline table-valued function | x | x | x | x | x |
IT | Internal table | x | x | x | x | |
P | SQL stored procedure | x | x | x | x | x |
PC | Assembly (CLR) stored procedure | x | x | x | x | |
PG | Plan guide | x | x | x | ||
PK | PRIMARY KEY constraint | x | x | x | x | x |
R | Rule (old-style, stand-alone) | x | x | x | x | |
RF | Replication-filter-procedure | x | x | x | x | |
S | System base table | x | x | x | x | x |
SN | Synonym | x | x | x | x | |
SO | Sequence Object | x | x | |||
SQ | Service queue | x | x | x | ||
TA | Assembly (CLR) DML trigger | x | x | x | x | |
TF | SQL table-valued-function | x | x | x | x | x |
TR | SQL DML trigger | x | x | x | x | x |
TT | Table type | x | x | |||
U | Table (user-defined) | x | x | x | x | x |
UQ | UNIQUE constraint | x | x | x | x | x |
V | View | x | x | x | x | x |
X | Extended stored procedure | x | x | |||
ET | External 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)
'SQL Server' 카테고리의 다른 글
SQL Server intersect ,except 는 join(조인), union(유니온) 과 무엇이 다른가? (0) | 2019.02.19 |
---|---|
SQL Server apply 쿼리 사용방법과 join 쿼리와의 차이점 (0) | 2019.02.11 |
SQL Server 테이블 데이터 중복제거 방법 (0) | 2019.02.09 |
SQL Server 조인(join) 을 이용한 데이터 업데이트 방법 (0) | 2019.02.09 |
SQL Server default 제약조건(constraint) 추가, 변경, 제거 (0) | 2019.02.09 |