[SQL Server][T-SQL] DROP IF Exists(SQL Server 2016新語法)

時常會在程式中建立資料表,建立前總是先判斷是否存在才進行刪除,此時會用sys.objects metadata查詢資料庫內的物件

或是OBJECT_ID函數是否能取出ID來判讀物件是否存在,現在SQL Server 2016有更簡單的做法。

DROP IF Exists

先準備環境: 建立一個測試資料庫及資料表

CREATE DATABASE dbNewTSQL;
USE dbNewTSQL
CREATE TABLE tbIF
 (C1 int)
GO

 

知新先溫故兩個作法:

A.傳回指定物件的物件識別碼

--Get Object id
SELECT OBJECT_ID('tbIF')

所以刪除的語法可以這樣寫:

IF OBJECT_ID('tbIF') IS NOT NULL
  DROP TABLE tbIF;

再查一次,刪除了!

B.取得資料庫內符合名稱的物件metadata

CREATE TABLE tbIF
 (C1 int)
GO

--Query sys.objects
SELECT * FROM sys.objects where name = 'tbIF'

所以刪除的語法:

IF Exists
(SELECT * FROM sys.objects where name = 'tbIF')
  DROP TABLE tbIF;

--Query sys.objects
SELECT * FROM sys.objects where name = 'tbIF'

資料表順利刪除了

C.SQL Server 2016 新語法Drop IF Exists

CREATE TABLE tbIF
 (C1 int)
GO

--Query sys.objects
SELECT * FROM sys.objects where name = 'tbIF'

刪除: 只要一行 Drop IF

DROP TABLE IF Exists tbIF;

--Query sys.objects
SELECT * FROM sys.objects where name = 'tbIF'

其他的資料庫物件也可以:

 

參考:

sys.sysobjects (Transact-SQL)

OBJECT_ID (Transact-SQL)

In SQL Server 2016 CTP3 objects can DIE (DROP IF EXISTS)