适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
创建名为默认值的对象。 如果绑定到列或别名数据类型,且在插入期间没有显式提供值,那么 default 会指定插入对象绑定到的列(或所有列,如果是别名数据类型的话)中的值。
重要
在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用使用DEFAULT关键字ALTER TABLECREATE TABLE或 .
语法
CREATE DEFAULT [ schema_name . ] default_name
AS constant_expression [ ; ]
参数
schema_name
default 所属架构的名称。
default_name
default 的名称。 默认值名称必须遵守标识符规则。 可以选择是否指定默认值所有者名称。
constant_expression
只包含常量值的表达式(不得包含任何列或其他数据库对象的名称)。 可以使用任何常量、内置函数或数学表达式,除非它们包含别名数据类型。 不得使用用户定义的函数。 将字符和日期常量括在单引号中('); 货币、整数和浮点常量不需要引号。 二进制数据前面必须有 0x,货币数据前面必须有美元符号($)。 默认值必须与列数据类型兼容。
备注
只能在当前数据库中创建 default 名称。 按照架构,在数据库内默认值名称必须是唯一的。 创建默认值时,用于 sp_bindefault 将其绑定到列或别名数据类型。
如果 default 与其绑定到的列不兼容,SQL Server 便会在尝试插入 default 值时生成错误消息。 例如,N/A 无法用作数值列的 default。
如果 default 值对于它绑定到的列而言太长,值便会遭截断。
CREATE DEFAULT 语句不能与其他 Transact-SQL 语句组合在一个批处理中。
必须先删除 default,然后才能创建同名的新 default。 并且,在删除默认值之前,必须取消 sp_unbindefault 绑定默认值。
如果列同时有默认值以及与之关联的规则,则默认值不能违反该规则。 永远不会插入与规则冲突的默认值,每次试图插入这样的默认值时,SQL Server 都会生成错误消息。
当绑定到列以后,在以下情况下将插入默认值:
- 值不是显式插入。
-
DEFAULT VALUESDEFAULT或关键字用于INSERT插入默认值。
如果在创建列时指定 NOT NULL ,并且未为其创建默认值,则当用户无法在该列中创建条目时,将生成一条错误消息。 下表说明了是否存在默认值与列NULL的定义之间的关系。NOT NULL 表中的项显示了结果。
| 列定义 | 没有输入项,没有默认值 | 没有输入项,有默认值 | Enter NULL,无默认值 |
Enter NULL,默认值 |
|---|---|---|---|---|
NULL |
NULL |
违约 | NULL |
NULL |
NOT NULL |
错误 | 违约 | 错误 | 错误 |
若要重命名默认值,请使用 sp_rename “对于默认报表”,请使用 sp_help。
权限
若要使用CREATE DEFAULT,至少用户必须在当前数据库中具有权限,并且ALTER必须具有CREATE DEFAULT创建默认值的架构的权限。
示例
A. 创建基本字符默认值
以下示例创建名为 unknown 的字符默认值。
USE AdventureWorks2022;
GO
CREATE DEFAULT phonedflt
AS 'unknown';
B. 绑定默认值
以下示例绑定在示例 A 中创建的默认值。只有当没有为 Phone 表的 Contact 列指定项时,默认值才会生效。
注意
省略任何条目与在语句中INSERT显式声明NULL不同。
由于不存在名为 phonedflt 的 default,因此无法执行以下 Transact-SQL 语句。 本例只用于演示。
USE AdventureWorks2022;
GO
EXECUTE sp_bindefault 'phonedflt', 'Person.PersonPhone.PhoneNumber';
相关内容
- 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)