Microsoft SQL Server 建立資料表前檢查資料表是否存在

假設我們使用下面的語法建立名為 USERS 的資料表(table):
    
CREATE TABLE USERS
(
    Id   int identity primary key,
    Name varchar(50) not null
);
    

第一次執行時應該會成功建立,但是若直接再執行一次,會拋出下面的錯誤,原因是同名的資料表已存在,無法再次建立。
    
[S0001][2714] Line 1: There is already an object named 'USERS' in the database.
    

如果要在執行建表語法前先檢查,在其他資料庫中會使用 CREATE TABLE IF NOT EXISTS ,但是在微軟的 SQL Server 中沒有類似的語法,不過還是可以透過下面的語法達成同樣的作用:
    
IF NOT EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Users]') AND type in (N'U'))
CREATE TABLE USERS
(
    Id   int identity primary key,
    Name varchar(50) not null
);
    

有點長,下面有條簡短的等效語法可以使用:
    
IF OBJECT_ID(N'USERS', N'U') IS NULL
CREATE TABLE USERS
(
    Id   int identity primary key,
    Name varchar(50) not null
);
    


註:需要注意執行時的使用者權限,若權限不足則很可能無法查詢 sys.objects 資料表。

留言