sp_bindefault (Transact-SQL)

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

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

重要

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

Transact-SQL 语法约定

语法

sp_bindefault
    [ @defname = ] N'defname'
    , [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

参数

[ @defname = ] N'defname'

默认创建 CREATE DEFAULT的名称。 @defname为 nvarchar(776),没有默认值。

[ @objname = ] N'objname'

要绑定到的表和列的名称或别名数据类型。 @objname为 nvarchar(776),没有默认值。 不能使用 varchar(max)、nvarchar(max)varbinary(max)xml 或 CLR 用户定义类型定义@objname。

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

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

[ @futureonly = ] 'futureonly'

仅在将默认值绑定到别名数据类型时使用。 @futureonly为 varchar(15),默认值为 NULL. 如果此参数设置为 futureonly,则该数据类型的现有列无法继承新的默认值。 将默认值绑定到列时,从不使用此参数。 如果@futureonlyNULL,则新的默认值将绑定到当前没有默认值或正在使用别名数据类型的现有默认值的任何别名数据类型的列。

返回代码值

0(成功)或 1(失败)。

注解

虽然首选使用约束,但DEFAULT可用于sp_bindefault将新的默认值绑定到列,也可以绑定到别名数据类型,而无需取消绑定现有默认值。 原有默认值将被覆盖。 不能将默认值绑定到 SQL Server 系统数据类型或 CLR 用户定义类型。 如果默认值与已绑定它的列不兼容,则 SQL Server 数据库引擎在尝试插入默认值时返回错误消息,而不是绑定默认值时。

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

将默认值绑定到列时,相关信息将添加到 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@futureonly 值指定,否则该列具有直接绑定到它的默认值。 绑定到列的默认值始终优先于绑定到数据类型的默认值。

USE master;
GO

EXEC sp_bindefault 'def_ssn', 'ssn';

°C 使用 futureonly 选项

以下示例将默认值 def_ssn 绑定到别名数据类型 ssn。 由于已指定 futureonly,因此不影响类型为 ssn 的现有列。

USE master;
GO

EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';

D. 使用带分隔符的标识符

以下示例演示了在 @objname 中使用带分隔符的[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.