共用方式為


指定資料行的預設值

適用於: SQL Server 2016 (13.x) 和更新版本 Azure SQL DatabaseAzure 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 中的物件總管來指定資料表資料行的預設值。 若要如此做,請執行下列步驟:

  1. 在 SSMS 中連線到 SQL Server 執行個體。

  2. 在 [物件總管] 中,找到要變更小數位數的資料行,以滑鼠右鍵按一下包含該資料行的資料表,然後選取 [設計]。

  3. 選取您要指定預設值的資料行。

  4. [資料行屬性] 索引標籤的 [預設值或繫結] 屬性中,輸入新的預設值。

    若要輸入數字預設值,請輸入數字。 若為物件或函數,請輸入其名稱。 若為英數字元預設值,請在單引號內輸入值。

  5. 在 [檔案]功能表,選取 [儲存<表格名稱>]

使用 Transact-SQL 來指定預設值

透過使用 T-SQL,有許多不同的方式可用來指定資料行的預設值。 在下列每個範例中,您可以使用這些步驟開啟新的 Transact-SQL 查詢。

  1. 在物件總管中,連線到資料庫引擎的執行個體。

  2. 在標準列上,選取 [新增查詢]

  3. 複製範例並將其貼到查詢視窗中,然後選取 [執行]

使用具名條件約束

使用資料庫專案時,建議使用名稱建立條件約束。 否則,默認條件約束會指定系統產生的名稱,這會在建立資料庫物件的每個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())
);

更新數據列時,默認條件約束不會變更。 若要在資料列修改時更新值,請考慮使用 觸發程式暫存表計算資料行,或 資料列版本 二進位字串。 您也可以藉由執行預存程式而不是直接插入數據列來插入數據列,其中預存程式可以強制執行商業規則、預設值和其他數據一致性規則。

若要偵測變更的數據列,請考慮 異動數據擷取變更追蹤時態表,或 總賬數據表