sp_bindefault (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

將預設值系結至數據行或別名數據類型。

重要

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 建議您改用 ALTER TABLE 或 CREATE TABLE 語句的 DEFAULT 關鍵詞來建立預設定義。

Transact-SQL 語法慣例

語法

sp_bindefault
    [ @defname = ] N'defname'
    , [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

引數

[ @defname = ] N'defname'

CREATE DEFAULT建立之預設值的名稱。 @defname為 nvarchar(776),沒有預設值。

[ @objname = ] N'objname'

要系結預設值的數據表和數據行名稱,或別名數據類型。 @objname為 nvarchar(776),沒有預設值。 @objname無法使用 varchar(max)、nvarchar(max)、varbinary(max)xml 或 CLR 使用者定義型別來定義

如果 @objname 是一部分名稱,它會解析為別名數據類型。 如果是兩個或三部分的名稱,它會先解析為數據表和數據行;如果此解析失敗,它會解析為別名數據類型。 根據預設,除非預設值直接系結至數據行,否則別名數據類型的現有數據行會繼承 @defname。 預設值無法繫結至 text、ntext、imagevarchar(max)、nvarchar(max)、varbinary(max)xmltimestamp 或 CLR 使用者定義類型數據行、具有 IDENTITY 屬性的數據行、計算數據行或已經具有DEFAULT條件約束的數據行。

@objname可以包含方括弧 ([]) 做為分隔標識符。 如需詳細資訊,請參閱 資料庫標識符

[ @futureonly = ] 'futureonly'

只有在將預設值系結至別名數據類型時才使用。 @futureonly為 varchar(15),預設值為 NULL。 當此參數設定為 futureonly時,該數據類型的現有數據行無法繼承新的預設值。 系結預設至數據行時,永遠不會使用此參數。 如果 @futureonlyNULL,則新的預設值會系結至目前沒有任何預設值或使用別名數據類型現有預設值的任何別名數據類型數據行。

傳回碼值

0 (成功) 或 1 (失敗)。

備註

sp_bindefault您可以使用 將新的預設值系結至數據行,雖然使用條件約束是慣用DEFAULT的,或是未解除系結現有預設值的別名數據類型。 已覆寫舊的預設值。 您無法將預設值系結至 SQL Server 系統資料類型或 CLR 使用者定義型別。 如果預設值與您已系結的數據行不相容,SQL Server 資料庫引擎 會在嘗試插入預設值時傳回錯誤訊息,而不是當您系結它時。

別名數據類型的現有數據行會繼承新的預設值,除非預設值直接系結至它們,否則 指定為 futureonly。 別名數據類型的新數據行一律會繼承預設值。

當您將預設值系結至數據行時,相關信息會新增至 sys.columns 目錄檢視。 當您將預設值系結至別名數據類型時,相關信息會新增至 sys.types 目錄檢視。

權限

用戶必須擁有數據表,或是系統管理員固定伺服器角色的成員,或是db_ownerdb_ddladmin固定資料庫角色的成員

範例

A. 將預設值系結至數據行

使用 ,在目前資料庫中CREATE DEFAULT定義名為 today 的預設 。 下列範例會將預設值系結至 HireDate 數據表的數據 Employee 行。 每當數據列加入數據表 Employee ,而且數據行的數據 HireDate 未提供時,數據行就會取得預設 today的值。

USE master;
GO

EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';

B. 將預設值系結至別名數據類型

名為 def_ssn 的預設和名為 ssn 的別名數據類型已經存在。 下列範例會將預設值 def_ssn 系結至 ssn。 建立數據表時,預設值會由指派別名數據類型 ssn的所有數據行繼承。 型別 ssn 的現有數據行也會繼承預設值 def_ssn,除非 futureonly 已針對 @futureonly 值指定,否則數據行具有直接系結的預設值。 系結至數據行的預設值一律優先於系結至數據類型的預設值。

USE master;
GO

EXEC sp_bindefault 'def_ssn', 'ssn';

C. futureonly使用選項

下列範例會將預設值 def_ssn 系結至別名資料類型 ssn。 因為 futureonly 已指定,因此不會影響類型 ssn 的現有數據行。

USE master;
GO

EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';

D. 使用分隔標識碼

下列範例示範在 @objname 中使用分隔識別碼 [t.1]

USE master;
GO

CREATE TABLE [t.1] (c1 int);
-- Notice the period as part of the table name.
EXEC sp_bindefault 'default1', '[t.1].c1';
-- The object contains two periods;
-- the first is part of the table name,
-- and the second distinguishes the table name from the column name.