创建称为默认值的对象。当绑定到列或用户定义数据类型时,如果插入时没有明确提供值,默认值便指定一个值,并将其插入到对象所绑定的列中(或者,在用户定义数据类型的情况下,插入到所有列中)。默认值是一个向后兼容的功能,它执行一些与使用 ALTER 或 CREATE TABLE 语句的 DEFAULT 关键字创建的默认值定义相同的功能。默认值定义是限制列数据的首选并且标准的方法,因为定义和表在一起,当除去表时,将自动除去默认值定义。然而,当在多个列中多次使用默认值时,默认值也有其优点。
语法
CREATE DEFAULT default
AS constant_expression
参数
default
默认值的名称。默认值名称必须符合标识符的规则。可以选择是否指定默认值所有者名称。
constant_expression
只包含常量值的表达式(不能包含任何列或其它数据库对象的名称)。可以使用任何常量、内置函数或数学表达式。字符和日期常量用单引号 (') 引起来;货币、整数和浮点常量不需要使用引号。二进制数据必须以 0x 开头,货币数据必须以美元符号 ($) 开头。默认值必须与列数据类型兼容。
注释
只能在当前数据库中创建默认值的名称。在数据库中,每个所有者的各默认值名称必须是唯一的。创建默认值后,使用 sp_bindefault 将其绑定到列或用户定义数据类型。
如果默认值和其绑定到的列不兼容,则在尝试插入默认值时,Microsoft® SQL Server™ 会生成错误信息。例如,N/A 不能用作 numeric 列的默认值。
如果默认值对于它所绑定的列而言太长,该值就会被截断。
在单个批处理中,CREATE DEFAULT 语句不能与其它 Transact-SQL 语句组合使用。
在以相同的名称创建新的默认值之前,必须除去原有的默认值,在除去前,必须通过执行 sp_unbindefault 来取消对该默认值的绑定。
如果列同时有默认值和规则与之关联,则默认值不能违反规则。与规则冲突的默认值将永远不能插入列,每次试图插入这样的默认值时,SQL Server 都会生成错误信息。
当绑定到列以后,在以下情况下将插入默认值:
非显式地插入值。
在 INSERT 中使用 DEFAULT VALUES 或 DEFAULT 关键字来插入默认值。
如果在创建列时指定 NOT NULL 并且没有为其创建默认值,则当用户未能为该列输入项时,就会生成错误信息。下表说明默认值的存在性与将列定义为 NULL 或 NOT NULL 之间的关系。表中的条目显示了结果。
说明 SQL Server 是将空字符串解释为单个空格还是解释为真正的空字符串,由 sp_dbcmptlevel 的设置控制。如果兼容级别小于或等于 65,SQL Server 就将空字符串解释为单个空格。如果兼容级别等于 70,则 SQL Server 将空字符串解释为空字符串。
若要重命名默认值,请使用 sp_rename。若要获得默认值的报表,请使用 sp_help。
权限
CREATE DEFAULT 的权限默认授予 sysadmin 固定角色成员和 db_owner 和 db_ddladmin 固定数据库角色成员。sysadmin、db_owner 和 db_securityadmin 角色的成员可以将权限转让给其他用户。
示例
A.创建简单的字符默认值
下面的示例创建字符默认值 unknown。
USE pubs
GO
CREATE DEFAULT phonedflt AS 'unknown'
B.绑定默认值
下面的示例绑定示例 A 中创建的默认值。只有当 authors 表的 phone 列没有输入项时,该默认值才起作用。请注意,没有输入项和显式指定空值不同。
因为名为 phonedflt 的默认值不存在,所以下列 Transact-SQL 语句将失败。本例只用于演示。
USE pubs
GO
sp_bindefault phonedflt, 'authors.phone'
【责编:admin】
--------------------next---------------------