创建称为
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 都会生成错误信息。
当绑定到列以后,在以下情况下将插入默认值:
如果在创建列时指定 NOT NULL 并且没有为其创建默认值,则当用户未能为该列输入项时,就会生成错误信息。下表说明默认值的存在性与将列定义为 NULL 或 NOT NULL 之间的关系。表中的条目显示了结果。
列定义 | 没有输入项, 没有默认值 | 没有输入项,有默认值 | 输入 NULL, 没有默认值 | 输入 NULL,有默认值 |
---|---|---|---|---|
NULL | NULL | default | NULL | NULL |
NOT NULL | Error | default | error | error |
说明 SQL Server 是将空字符串解释为单个空格还是解释为真正的空字符串,由 sp_dbcmptlevel 的设置控制。如果兼容级别小于或等于 65,SQL Server 就将空字符串解释为单个空格。如果兼容级别等于 70,则 SQL Server 将空字符串解释为空字符串。有关更多信息,请参见 sp_dbcmptlevel。
若要重命名默认值,请使用 sp_rename。若要获得默认值的报表,请使用 sp_help。
CREATE DEFAULT 的权限默认授予 sysadmin 固定服务器角色成员和 db_owner 和 db_ddladmin 固定数据库角色成员。sysadmin、db_owner 和 db_securityadmin 角色的成员可以将权限转让给其他用户。
下面的示例创建字符默认值 unknown。
USE pubs
GO
CREATE DEFAULT phonedflt AS 'unknown'
下面的示例绑定示例 A 中创建的默认值。只有当 authors 表的 phone 列没有输入项时,该默认值才起作用。请注意,没有输入项和显式指定空值不同。
因为名为 phonedflt 的默认值不存在,所以下列 Transact-SQL 语句将失败。本例只用于演示。
USE pubs相关文章
GO
sp_bindefault phonedflt, 'authors.phone'