適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
建立一個稱為預設值的物件。 當繫結到某個資料行或別名資料類型,且在插入作業期間未明確提供任何值時,預設值會指定要插入物件所繫結之資料行 (如果是別名資料類型,則是所有資料行) 的值。
重要
SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用使用 或 DEFAULT的ALTER TABLE關鍵字建立CREATE TABLE的預設定義。
語法
CREATE DEFAULT [ schema_name . ] default_name
AS constant_expression [ ; ]
引數
schema_name
預設值所屬的結構描述名稱。
default_name
預設值的名稱。 預設名稱必須符合識別碼的規則。 您可以選擇性地指定預設擁有者名稱。
constant_expression
只包含常數值的運算式 (其中不能有任何資料行或其他資料庫物件的名稱)。 您可以使用任何常數、內建函式或數學運算式,但包含別名資料類型的項目除外。 使用者自訂函式則不能使用。 將字元和日期常數括在單引號 ()'中;貨幣、整數和浮點常數不需要引號。 二進位資料前面必須 0x加上 ,而貨幣資料前面必須加上美元符號 ($)。 預設值必須相容於資料行資料類型。
備註
您只能在目前資料庫中建立預設名稱。 在資料庫內,必須藉由結構描述,使預設名稱成為唯一。 當您建立預設值時,請使用 來 sp_bindefault 將它繫結至直欄或別名資料類型。
如果預設值與所繫結的資料行不相容,則在嘗試插入預設值時,SQL Server 會產生一則錯誤訊息。 例如,N/A 不能作為 numeric 資料行的預設值。
如果預設值對它所繫結的資料行而言太長,系統就會截斷這個值。
CREATE DEFAULT 陳述式無法在單一批次中與其他 Transact-SQL 陳述式結合。
您必須先卸除預設值,才能建立同名的新預設值。 而且,預設值必須先執行 sp_unbindefault ,才能卸除。
如果資料行有預設值和相關聯的規則,預設值便不能違反規則。 永遠不會插入與規則衝突的預設值,SQL Server 每次嘗試插入預設值時,都會產生一則錯誤訊息。
當繫結到資料行時,在下列情況下,會插入預設值:
- 未明確插入值。
-
DEFAULT VALUESDEFAULTINSERT或關鍵字用於插入預設值。
如果您在建立資料行時指定 NOT NULL ,但未為其建立預設值,則當使用者無法在該資料行中建立項目時,會產生錯誤訊息。 下表說明預設值的存在與資料行定義之間的NULLNOT NULL關係 或 。 資料表中各項目顯示其結果。
| 資料行定義 | 無項目,無預設值 | 無項目,有預設值 | Enter NULL,無預設值 |
輸入 NULL,預設 |
|---|---|---|---|---|
NULL |
NULL |
預設 | NULL |
NULL |
NOT NULL |
錯誤 | 預設 | 錯誤 | 錯誤 |
若要重新命名預設值,請使用 sp_rename 對於預設值的報告,請使用 sp_help。
權限
若要使用 CREATE DEFAULT,使用者至少必須具有 CREATE DEFAULT 目前資料庫的權限,以及 ALTER 正在建立預設值的結構描述的權限。
範例
A. 建立基本字元預設值
下列範例會建立一個稱為 unknown 的字元預設值。
USE AdventureWorks2022;
GO
CREATE DEFAULT phonedflt
AS 'unknown';
B. 繫結預設值
下列範例會繫結 A 範例中所建立的預設值。只有在 Phone 資料表的 Contact 資料行中沒有指定任何項目時,預設值才會生效。
注意
省略任何條目與在聲明中NULL明確陳述INSERT不同。
由於名稱為 phonedflt 的預設值不存在,因此下列 Transact-SQL 陳述式會失敗。 這個範例只供說明。
USE AdventureWorks2022;
GO
EXECUTE sp_bindefault 'phonedflt', 'Person.PersonPhone.PhoneNumber';