指定資料行的預設值
適用於: SQL Server 2016 (13.x) 和更新版本
Azure SQL Database
Azure SQL 受控實例
Azure Synapse Analytics
分析平台系統 (PDW)
Microsoft Fabric
您可以使用 SQL Server Management Studio (SSMS),指定在資料表資料行中輸入的預設值。 您可以使用物件總管或執行 Transact-SQL 設定預設值。
如果您未將預設值指派給資料行,且使用者將資料行保留空白,則:
如果設定允許 Null 值的選項,
NULL
會插入資料行。如果您未設定允許 Null 值的選項,資料行會維持空白,但使用者或應用程式無法插入數據列,直到它們提供資料行的值為止。
您可以針對各種工作使用預設條件約束,以確保資料庫層級的數據一致性:
- 將「active」或「enable」欄在插入時的值設為
1
。 - 將日期欄位的數據列值設定為目前的日期。
- 將欄位的資料欄值設定為決定性系統函式,例如,
DB_NAME()
。
限制
在您開始之前,請留意下列限制和約束:
如果 [預設值] 欄位中的輸入內容取代繫結的預設值 (顯示為沒有括弧),系統會提示您解除繫結預設值,並使用新的預設值加以取代。
若要輸入文字字串,請以單引號 (
'
) 括住值。 請勿使用雙引號 ("
),因為它們會保留給引號識別項。若要輸入數字預設值,請輸入數字,但不要加上引號。
若要輸入物件/函數,請輸入物件/函數的名稱,但不要加上引號。
在 Azure Synapse Analytics 中,只有常數可用於預設條件約束。 運算式不能與預設條件約束搭配使用。
權限
本文所述的動作需要資料表的 ALTER
權限。
使用 SQL Server Management Studio 指定預設值
您可以使用 SSMS 中的物件總管來指定資料表資料行的預設值。 若要如此做,請執行下列步驟:
在 SSMS 中連線到 SQL Server 執行個體。
在 [物件總管] 中,找到要變更小數位數的資料行,以滑鼠右鍵按一下包含該資料行的資料表,然後選取 [設計]。
選取您要指定預設值的資料行。
在 [資料行屬性] 索引標籤的 [預設值或繫結] 屬性中,輸入新的預設值。
若要輸入數字預設值,請輸入數字。 若為物件或函數,請輸入其名稱。 若為英數字元預設值,請在單引號內輸入值。
在 [檔案]功能表,選取 [儲存<表格名稱>]。
使用 Transact-SQL 來指定預設值
透過使用 T-SQL,有許多不同的方式可用來指定資料行的預設值。 在下列每個範例中,您可以使用這些步驟開啟新的 Transact-SQL 查詢。
在物件總管中,連線到資料庫引擎的執行個體。
在標準列上,選取 [新增查詢]。
複製範例並將其貼到查詢視窗中,然後選取 [執行]。
使用具名條件約束
使用資料庫專案時,建議使用名稱建立條件約束。 否則,默認條件約束會指定系統產生的名稱,這會在建立資料庫物件的每個SQL Server環境中有所不同。
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);
使用 ALTER TABLE
您可以將具名條件約束新增至具有 ALTER TABLE
的現有數據表。
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT
); -- Allows nulls.
GO
INSERT INTO dbo.doc_exz (column_a)
VALUES (7);
GO
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50 FOR column_b;
GO
使用 CREATE TABLE
您可以使用 CREATE TABLE
建立具有預設條件約束的新數據表。
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);
設定建立日期
下列範例會使用 sysdatetimeoffset()
系統函式,將建立數據列的日期填入 dateinserted
數據行的數據列值。
CREATE TABLE dbo.test (
id INT identity(1, 1) NOT NULL CONSTRAINT PK_test PRIMARY KEY
,date_inserted DATETIMEOFFSET(2) NOT NULL CONSTRAINT DF_test_date_inserted DEFAULT(sysdatetimeoffset())
);
更新數據列時,默認條件約束不會變更。 若要在資料列修改時更新值,請考慮使用 觸發程式、暫存表、計算資料行,或 資料列版本 二進位字串。 您也可以藉由執行預存程式而不是直接插入數據列來插入數據列,其中預存程式可以強制執行商業規則、預設值和其他數據一致性規則。
若要偵測變更的數據列,請考慮 異動數據擷取、變更追蹤、時態表,或 總賬數據表。