在自動化部署、測試環境重置或安裝腳本中,需確保物件不存在時建立、存在時可選重建。以下為標準範本:
IF EXISTS (SELECT * FROM sysdatabases WHERE name = 'TargetDB')
BEGIN
-- 視需求決定是否 DROP,生產環境極度謹慎
-- DROP DATABASE TargetDB;
PRINT 'Database already exists.';
END
ELSE
BEGIN
CREATE DATABASE TargetDB;
PRINT 'Database created.';
END
USE TargetDB;
GO
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'TargetTable' AND xtype = 'U')
BEGIN
DROP TABLE TargetTable;
END
GO
CREATE TABLE TargetTable (
Col_ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Col_Code VARCHAR(16) NOT NULL UNIQUE,
Col_Name VARCHAR(100) NOT NULL,
Col_Desc VARCHAR(200) NULL, -- 最後一欄無逗號
Col_Status TINYINT DEFAULT 1 NOT NULL
);
GO
sys.databases, sys.tables。IDENTITY:自動遞增欄位,常用於代理鍵。PRIMARY KEY / UNIQUE:定義約束同時建立索引。GO:批次分隔符 (非 T-SQL 指令),SSMS/sqlcmd 需要,動態 SQL 執行時需移除。DECLARE @SQL NVARCHAR(MAX) = N'
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = ''DynamicDB'')
CREATE DATABASE DynamicDB;';
EXEC sp_executesql @SQL;
採用 sp_executesql 可參數化,避免 SQL 注入風險,適用於資料庫名稱由變數傳入的場景。