sp_bindefault (Transact-SQL)
將預設值繫結到資料行或別名資料類型。
重要事項 |
---|
未來的 Microsoft SQL Server 版本將移除這項功能。請勿在新的開發工作中使用此功能,並且儘速修改使用此功能的應用程式。 我們建議您改用 ALTER TABLE 或 CREATE TABLE 陳述式的 DEFAULT 關鍵字來建立預設定義。如需詳細資訊,請參閱<建立和修改 DEFAULT 定義>。 |
語法
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。預設值無法繫結到 text、ntext、image、varchar(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_owner 和 db_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.