CREATE DEFAULT (Transact-SQL)
建立一個稱為預設值的物件。當繫結到某個資料行或別名資料類型,且在插入作業期間未明確提供任何值時,預設值會指定要插入物件所繫結之資料行 (如果是別名資料類型,則是所有資料行) 的值。
重要事項 |
---|
未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。請改為使用透過 ALTER TABLE 或 CREATE TABLE 的 DEFAULT 關鍵字所建立的預設定義。如需詳細資訊,請參閱<建立和修改 DEFAULT 定義>。 |
語法
CREATE DEFAULT [ schema_name . ] default_name
AS constant_expression [ ; ]
引數
備註
預設名稱只能建立在目前資料庫中。在資料庫內,必須藉由結構描述,使預設名稱成為唯一。當建立預設值時,請利用 sp_bindefault,將它繫結到資料行或別名資料類型。
如果預設值與所繫結的資料行不相容,當嘗試插入預設值時,SQL Server 會產生一則錯誤訊息。例如,N/A 不能用來做為 numeric 資料行的預設值。
如果預設值對它所繫結的資料行而言太長,就會截斷這個值。
CREATE DEFAULT 陳述式無法在單一批次中,與其他 Transact-SQL 陳述式結合起來。
您必須先卸除預設值,才能建立同名的新預設值,在卸除預設值之前,您必須先執行 sp_unbindefault 來解除預設值的繫結。
如果資料行有預設值和相關聯的規則,預設值便不能違反規則。永遠不會插入與規則衝突的預設值,SQL Server 每次嘗試插入預設值時,都會產生一則錯誤訊息。
當繫結到資料行時,在下列情況下,會插入預設值:
未明確插入值。
搭配 INSERT 使用 DEFAULT VALUES 或 DEFAULT 關鍵字來插入預設值。
如果建立資料行時指定了 NOT NULL,且並未建立其預設值,當使用者無法在這個資料行中建立項目時,便會產生錯誤訊息。下表說明預設值的存在與資料行定義為 NULL 或 NOT NULL 之間的關聯性。資料表中各項目顯示其結果。
資料行定義 |
無項目,無預設值 |
無項目,有預設值 |
輸入 NULL,無預設值 |
輸入 NULL,有預設值 |
---|---|---|---|---|
NULL |
NULL |
預設值 |
NULL |
NULL |
NOT NULL |
錯誤 |
預設值 |
錯誤 |
錯誤 |
若要重新命名預設值,請使用 sp_rename。如需預設值的報表,請使用 sp_help。
權限
若要執行 CREATE DEFAULT,使用者至少必須有目前資料庫中的 CREATE DEFAULT 權限,以及正在建立的預設值之結構描述的 ALTER 權限。
範例
A. 建立簡單字元預設值
下列範例會建立一個稱為 unknown 的字元預設值。
USE AdventureWorks;
GO
CREATE DEFAULT phonedflt AS 'unknown';
B. 繫結預設值
下列範例會繫結 A 範例中所建立的預設值。只有在 Contact 資料表的 Phone 資料行中沒有指定任何項目時,預設值才會生效。請注意,省略任何項目與在 INSERT 陳述式中明確地陳述 NULL 並不相同。
由於名稱為 phonedflt 的預設值不存在,因此,下列 Transact-SQL 陳述式會失敗。這個範例只供說明。
USE AdventureWorks;
GO
sp_bindefault 'phonedflt', 'Person.Contact.Phone';
請參閱