将默认值绑定到列或绑定到别名数据类型
将默认值绑定到列或绑定到别名数据类型。
重要提示: |
---|
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 建议改用 ALTER TABLE 或 CREATE TABLE 语句的 DEFAULT 关键字创建默认值定义。有关详细信息,请参阅创建和修改 DEFAULT 定义。 |
-
[ @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 可以包含方括号 [ ] 作为分隔标识符。有关详细信息,请参阅分隔标识符(数据库引擎)。
-
[ @futureonly = ] 'futureonly_flag'
-
只有将默认值绑定到别名数据类型时才使用。futureonly_flag 的数据类型为 varchar(15),默认值为 NULL。当此参数设置为 futureonly 时,该数据类型的现有列无法继承新默认值。将默认值绑定到列时,从不使用此参数。如果 futureonly_flag 为 NULL,则新默认值将绑定到别名数据类型的所有列,这些列当前没有默认值或正在使用别名数据类型的现有默认值。
在不取消绑定现有默认值的情况下,可以使用 sp_bindefault 将新默认值绑定到列(尽管最好使用 DEFAULT 约束)或者绑定到别名数据类型。原有默认值将被覆盖。不能将默认值绑定到 SQL Server 2005 系统数据类型或 CLR 用户定义类型。如果默认值和要绑定到的列不兼容,那么在试图插入默认值时(不是在绑定时),SQL Server 数据库引擎 将返回错误消息。
除非直接将默认值绑定到别名数据库类型的现有列或者将 futureonly_flag 指定为 futureonly,否则别名数据类型的现有列将继承新默认值。别名数据类型的新列始终继承默认值。
将默认值绑定到列时,相关信息将添加到 sys.columns 目录视图中。将默认值绑定到别名数据类型时,相关信息将添加到 sys.types 目录视图中。
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.
http://technet.microsoft.com/zh-cn/library/ms177503(SQL.90).aspx