時常會在程式中建立資料表,建立前總是先判斷是否存在才進行刪除,此時會用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'
其他的資料庫物件也可以:
參考:
In SQL Server 2016 CTP3 objects can DIE (DROP IF EXISTS)