sp_bindefault (Transact-SQL)

將預設值繫結到資料行或別名資料類型。

重要注意事項重要事項

未來的 Microsoft SQL Server 版本將移除這項功能。請勿在新的開發工作中使用此功能,並且儘速修改使用此功能的應用程式。 我們建議您改用 ALTER TABLECREATE TABLE 陳述式的 DEFAULT 關鍵字來建立預設定義。如需詳細資訊,請參閱<建立和修改 DEFAULT 定義>。

主題連結圖示Transact-SQL 語法慣例

語法

sp_bindefault [ @defname = ] 'default' , 
    [ @objname = ] 'object_name' 
    [ , [ @futureonly = ] 'futureonly_flag' ] 

引數

  • [ @defname= ] 'default'
    這是 CREATE DEFAULT 所建立之預設值的名稱。default 是 nvarchar(776),沒有預設值。

  • [ @objname= ] 'object_name'
    這是預設值將繫結的資料表和資料行或別名資料類型的名稱。object_name 是 nvarchar(776),沒有預設值。object_name 不能用 varchar(max)、nvarchar(max)、varbinary(max)、xml 或 CLR 使用者定義型別來定義。

    如果 object_name 是單部份的名稱,就會將它解析成別名資料類型。如果它是兩部份或三部份的名稱,就會先將它解析成資料表和資料行;如果這項解析失敗,就會將它解析成別名資料類型。依預設,除非預設值直接繫結到資料行,否則,別名資料類型的現有資料行會繼承 default。預設值無法繫結到 textntextimagevarchar(max)nvarchar(max)varbinary(max)xml、timestamp 或 CLR 使用者自訂類型資料行,也就是含 IDENTITY 屬性的資料行、計算資料行或已有 DEFAULT 條件約束的資料行。

    [!附註]

    object_name 可以包含方括號 [] 來作為分隔識別碼。如需詳細資訊,請參閱<分隔識別碼 (Database Engine)>。

  • [ @futureonly= ] 'futureonly_flag'
    只有將預設值繫結到別名資料類型時,才會使用這個項目。futureonly_flag 是 varchar(15),預設值是 NULL。當這個參數設為 futureonly 時,這個資料類型現有的資料行無法繼承新的預設值。當預設值繫結到資料行時,永遠不會使用這個參數。如果 futureonly_flag 是 NULL,新預設值會繫結到別名資料類型目前沒有預設值的任何資料行,或使用別名資料類型現有預設值的任何資料行。

傳回碼值

0 (成功) 或 1 (失敗)

備註

您可以利用 sp_bindefault,將新預設值繫結到資料行 (不過,最好是用 DEFAULT 條件約束),或在不切斷現有預設值的情況下,繫結到別名資料類型。此時會覆寫舊的預設值。您不能將預設值繫結到 SQL Server 系統資料類型或 CLR 使用者自訂類型。如果預設值與所繫結的資料行不相容,當它嘗試插入預設值時,而不是當您試圖繫結它時,SQL Server Database Engine 會傳回一則錯誤訊息。

除非預設值直接繫結到別名資料類型的現有資料行,或將 futureonly_flag 指定為 futureonly,否則,別名資料類型的資料行會繼承新的預設值。別名資料類型的新資料行一律會繼承預設值。

當您將預設值繫結到資料行時,會將相關資訊加入 sys.columns 目錄檢視中。當您將預設值繫結到別名資料類型時,會將相關資訊加入 sys.types 目錄檢視中。

權限

使用者必須擁有資料表,或必須是系統管理員 (sysadmin) 固定伺服器角色的成員,或是 db_ownerdb_ddladmin 固定資料庫角色的成員。

範例

A. 將預設值繫結到資料行

已利用 CREATE RULE 陳述式,在目前資料庫中定義名稱為 today 的預設值,下列範例會將預設值繫結到 Employee 資料表的 HireDate 資料行。每當將資料列加入 Employee 資料表,且未提供 HireDate 資料行的資料時,資料行都會取得 today 預設值的值。

USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';

B. 將預設值繫結到別名資料類型

名稱為 def_ssn 的預設值和名稱為 ssn 的別名資料類型已經存在。下列範例會將 def_ssn 預設值繫結到 ssn。當建立資料表時,所有指派了別名資料類型 ssn 的資料行都會繼承預設值。除非將 futureonly 指定給 futureonly_flag,或 ssn 類型的現有資料行有直接繫結的預設值,否則,這些資料行也會繼承 def_ssn 預設值。繫結到資料行的預設值,一律優先於繫結到資料類型的預設值。

USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn';

C. 使用 futureonly_flag

下列範例將 def_ssn 預設值繫結到別名資料類型 ssn。由於指定了 futureonly,不會影響任何現有 ssn 類型的資料行。

USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';

D. 使用分隔的識別碼

下列範例會顯示如何在 object_name 中使用分隔識別碼 [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.