CREATE DEFAULT (Transact-SQL)
创建称为默认值的对象。当绑定到列或别名数据类型时,如果插入时没有显式提供值,则默认值将指定一个值,以便将其插入该对象所绑定的列中(或者,如果是别名数据类型,则插入所有列中)。
重要提示: |
---|
未来的 Microsoft SQL Server 版本中将删除 CREATE DEFAULT。请避免在新的开发工作中使用 CREATE DEFAULT,并计划修改当前使用它的应用程序。而应使用通过使用 ALTER TABLE 或 CREATE TABLE 的 DEFAULT 关键字所创建的默认值定义。有关详细信息,请参阅创建和修改 DEFAULT 定义。 |
语法
CREATE DEFAULT [ schema_name . ] default_name
AS constant_expression [ ; ]
参数
- schema_name
默认值所属架构的名称。
- default_name
默认值的名称。默认值名称必须遵守标识符规则。可以选择是否指定默认值所有者名称。
- constant_expression
只包含常量值的表达式(它不能包括任何列或其他数据库对象的名称)。除了那些包含别名数据类型的表达式,可以使用任何常量、内置函数或数学表达式。不能使用用户定义函数。字符和日期常量要放在单引号 (') 内;货币、整数和浮点常量不需要引号。二进制数据必须以 0x 开头,货币数据必须以美元符号 ($) 开头。默认值必须与列数据类型兼容。
备注
只能在当前数据库中创建默认值名称。按照架构,在数据库内默认值名称必须是唯一的。创建默认值时,请使用 sp_bindefault 将其绑定到列或别名数据类型。
如果默认值与其绑定的列不兼容,则在试图插入默认值时,SQL Server 会生成错误消息。例如,N/A 不能用作 numeric 列的默认值。
如果默认值对于它所绑定的列而言太长,则该值就会被截断。
不能将 CREATE DEFAULT 语句与其他 Transact-SQL 语句组合到单个批处理中。
在以相同的名称创建新的默认值之前,必须删除原有默认值,在删除前,必须通过执行 sp_unbindefault 来取消对该默认值的绑定。
如果列同时有默认值以及与之关联的规则,则默认值不能违反该规则。永远不会插入与规则冲突的默认值,每次试图插入这样的默认值时,SQL Server 都会生成错误消息。
当绑定到列以后,在以下情况下将插入默认值:
- 非显式地插入值。
- 在 INSERT 中使用 DEFAULT VALUES 或 DEFAULT 关键字来插入默认值。
如果在创建列时指定 NOT NULL 并且没有为其创建默认值,则当用户未能为该列输入项时,就会生成错误消息。下表说明默认值的存在与将列定义为 NULL 或 NOT NULL 之间的关系。表中的项显示了结果。
列定义 | 没有输入项,没有默认值 | 没有输入项,有默认值 | 输入 NULL,没有默认值 | 输入 NULL,有默认值 |
---|---|---|---|---|
NULL |
NULL |
默认值 |
NULL |
NULL |
NOT NULL |
错误 |
默认值 |
error |
error |
注意: |
---|
SQL Server 将空字符串解释为单个空格还是解释为真正的空字符串,由 sp_dbcmptlevel 设置控制。如果兼容级别小于或等于 65,则 SQL Server 会将空字符串解释为单个空格。如果兼容级别等于 70,则 SQL Server 会将空字符串解释为空字符串。有关详细信息,请参阅 sp_dbcmptlevel (Transact-SQL)。 |
若要重命名默认值,请使用 sp_rename。若要获得默认值的报告,请使用 sp_help。
权限
若要执行 CREATE DEFAULT,用户必须至少在当前数据库中拥有 CREATE DEFAULT 权限,并对在其中创建默认值的架构拥有 ALTER 权限。
示例
A. 创建简单的字符默认值
以下示例创建名为 unknown
的字符默认值。
USE AdventureWorks;
GO
CREATE DEFAULT phonedflt AS 'unknown';
B. 绑定默认值
以下示例绑定在示例 A 中创建的默认值。只有当没有为 Contact
表的 Phone
列指定项时,默认值才会生效。注意,省略任何项都与在 INSERT 语句中显式声明 NULL 不同。
由于不存在名为 phonedflt
的默认值,因此以下 Transact-SQL 语句将失败。本例只用于演示。
USE AdventureWorks;
GO
sp_bindefault 'phonedflt', 'Person.Contact.Phone';
请参阅
参考
ALTER TABLE (Transact-SQL)
CREATE RULE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DROP DEFAULT (Transact-SQL)
DROP RULE (Transact-SQL)
表达式(Transact-SQL)
INSERT (Transact-SQL)
sp_bindefault (Transact-SQL)
sp_help (Transact-SQL)
sp_helptext (Transact-SQL)
sp_rename (Transact-SQL)
sp_unbindefault (Transact-SQL)