sp_bindefault (Transact-SQL)
将默认值绑定到列或绑定到别名数据类型。
重要提示 |
---|
后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。建议改用 ALTER TABLE 或 CREATE TABLE 语句的 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),无默认值。 不能使用 varchar(max)、nvarchar(max)、varbinary(max)、xml 或 CLR 用户定义类型来定义 object_name。如果 object_name 是由单个部分组成的名称,则按别名数据类型进行解析。 如果是由两部分或三部分组成的名称,则首先按表和列进行解析;如果解析失败,则按别名数据类型进行解析。 默认情况下,除非默认值已经直接绑定到列,否则别名数据类型的现有列将继承 default。 默认值不能绑定到 text、ntext、image、varchar(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_owner 和 db_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.