適用於:SQL Server 2016 (13.x) 及以後版本
Azure SQL Database
AzureSQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL database in Microsoft Fabric
您可以使用 SQL Server Management Studio (SSMS),指定在資料表資料行中輸入的預設值。 您可以使用物件總管或執行 Transact-SQL 設定預設值。
如果您未將預設值指派給資料行,且使用者將資料行保留空白,則:
如果設定允許 Null 值的選項,
NULL會插入資料行。如果您未設定允許 Null 值的選項,資料行會維持空白,但使用者或應用程式無法插入數據列,直到它們提供資料行的值為止。
您可以針對各種工作使用預設條件約束,以確保資料庫層級的數據一致性:
- 將「active」或「enable」欄在插入時的值設為
1。 - 將日期欄位的數據列值設定為目前的日期。
- 將欄位的資料欄值設定為決定性系統函式,例如,
DB_NAME()。
Limitations
在您開始之前,請留意下列限制和約束:
如果 [預設值] 欄位中的輸入內容取代繫結的預設值 (顯示為沒有括弧),系統會提示您解除繫結預設值,並使用新的預設值加以取代。
若要輸入文字字串,請以單引號 (
') 括住值。 請勿使用雙引號 ("),因為它們會保留給引號識別項。若要輸入數字預設值,請輸入數字,但不要加上引號。
若要輸入物件/函數,請輸入物件/函數的名稱,但不要加上引號。
在 Azure Synapse Analytics 中,只有常數可用於預設條件約束。 運算式不能與預設條件約束搭配使用。
Permissions
本文所述的動作需要資料表的 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())
);
更新數據列時,默認條件約束不會變更。 若要在資料列修改時更新值,請考慮使用 觸發程式、暫存表、計算資料行,或 資料列版本 二進位字串。 您也可以藉由執行預存程式而不是直接插入數據列來插入數據列,其中預存程式可以強制執行商業規則、預設值和其他數據一致性規則。
若要偵測變更的數據列,請考慮 異動數據擷取、變更追蹤、時態表,或 總賬數據表。