sp_bindefault (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

将默认值绑定到列或绑定到别名数据类型。

重要

后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 建议改用 ALTER TABLECREATE TABLE 语句的 DEFAULT 关键字来创建默认定义。

Transact-SQL 语法约定

语法

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

参数

[ @defname = ] 'default' 由 CREATE DEFAULT 创建的默认值的名称。 default 为nvarchar (776) ,没有默认值。

[ @objname = ] 'object_name' 表和列的名称或默认要绑定到的别名数据类型。 object_namenvarchar (776) ,没有默认值。 无法使用varchar (max) nvarchar (max) varbinary (max) xml 或 CLR 用户定义类型定义object_name。

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

注意

object_name 可以包含括号 [] 作为分隔标识符。 有关详细信息,请参阅 Database Identifiers

[ @futureonly = ] 'futureonly_flag' 仅在将默认值绑定到别名数据类型时使用。 futureonly_flagvarchar (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 的默认值,以下示例将此默认值绑定到 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_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.  

另请参阅

数据库引擎存储过程 (Transact-SQL)
CREATE DEFAULT (Transact-SQL)
DROP DEFAULT (Transact-SQL)
sp_unbindefault (Transact-SQL)
系统存储过程 (Transact-SQL)