[ TSQL ] SQL 2016 開始支援 DROP IF EXISTS 語法

日前上揚志強老師的線上課程時看見楊老師的TSQL中有一句我沒用過的寫法,當下引起了我的興趣而測試了一下。發現該語法只有SQL2016才支援,所以算是新語法,在此分享給大家。

以前我們要刪除已存在的資料表,常用語法如下:

--用Object_ID函數取出該資料表的ID,如果回傳為NULL則表示資料表不存在
IF (OBJECT_ID('TableName')) Is Not Null 
    Drop Table TableName;
--先Select系統資料表,看看目標Table是否存在,存在的話就刪除
IF EXISTS(Select name From sys.tables Where Name='TableName')
   Drop Table TableName

 

日前無意間看見楊老師用了一個更簡易的語法DROP IF EXISTS,範例如下:

Drop Table IF Exists TableName

由上圖範例可以看見當我們執行完該語法後,資料表Tb1就被刪除了。

 

DROP IF EXISTS也支援刪除資料表的Column及Constraint ,語法如下:
Alter Table [TableName] Drop Column IF Exists [ColumnName] 

Alter Table [TableName] Drop Constraint IF Exists [ConstraintName] 

 

下圖範例為刪除Tb1中的Phone2欄位。

 

下圖範例為刪除Tb1中的Constraint名為DF_tb1_phone2。

 

最後下圖表列DROP IF EXISTS語法支援的資料庫物件
AGGREGATE PROCEDURE TABLE
ASSEMBLY ROLE TRIGGER
VIEW RULE TYPE
DATABASE SCHEMA USER
DEFAULT SECURITY POLICY VIEW
FUNCTION SEQUENCE  
INDEX SYNONYM  

 

我是ROCK

rockchang@mails.fju.edu.tw