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),没有默认值。不能使用 varchar(max)、nvarchar(max)、varbinary(max)、xml 或 CLR 用户定义类型来定义 object_name。

    如果 object_name 是由单个部分组成的名称,则按别名数据类型进行解析。如果是由两部分或三部分组成的名称,则首先按表和列进行解析;如果解析失败,则按别名数据类型进行解析。默认情况下,除非默认值已经直接绑定到列,否则别名数据类型的现有列将继承 default。默认值不能绑定到 textntextimagevarchar(max)nvarchar(max)varbinary(max)xml、timestamp 或 CLR 用户定义类型列,也不能绑定到具有 IDENTITY 属性的列、计算列或已具有 DEFAULT 约束的列。

    注意注意

    object_name 可以包含方括号 [] 作为分隔标识符。有关详细信息,请参阅分隔标识符(数据库引擎)

  • [ @futureonly= ] 'futureonly_flag'
    仅当将默认值绑定到别名数据类型时才能使用。futureonly_flag 的数据类型为 varchar(15),默认值为 NULL。当此参数设置为 futureonly 时,该数据类型的现有列无法继承新默认值。将默认值绑定到列时,从不使用此参数。如果 futureonly_flag 为 NULL,则新默认值将绑定到别名数据类型的所有列,这些列当前没有默认值或正在使用别名数据类型的现有默认值。

返回代码值

0(成功)或 1(失败)

注释

在不取消绑定现有默认值的情况下,可以使用 sp_bindefault 将新默认值绑定到列(尽管最好使用 DEFAULT 约束)或者绑定到别名数据类型。原有默认值将被覆盖。不能将默认值绑定到 SQL Server 系统数据类型或 CLR 用户定义类型。如果默认值和要绑定到的列不兼容,那么在试图插入默认值时(不是在绑定时),SQL Server 数据库引擎 将返回错误消息。

除非直接将默认值绑定到别名数据库类型的现有列或者将 futureonly_flag 指定为 futureonly,否则别名数据类型的现有列将继承新默认值。别名数据类型的新列始终继承默认值。

将默认值绑定到列时,相关信息将添加到 sys.columns 目录视图中。将默认值绑定到别名数据类型时,相关信息将添加到 sys.types 目录视图中。

权限

用户必须是表的所有者,或者是 sysadmin 固定服务器角色的成员,或 db_ownerdb_ddladmin 固定数据库角色的成员。

示例

A. 将默认值绑定到列

已经使用 CREATE DEFAULT 在当前数据库中定义了名为 today 的默认值,以下示例将此默认值绑定到 Employee 表的 HireDate 列。每当将行添加到 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_flag 值指定了 futureonly,或者在列上直接绑定了默认值。绑定到列的默认值始终优先于绑定到数据类型的默认值。

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.