CREATE DEFAULT (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

创建名为默认值的对象。 如果绑定到列或别名数据类型,且在插入期间没有显式提供值,那么 default 会指定插入对象绑定到的列(或所有列,如果是别名数据类型的话)中的值。

重要

在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 将改用默认值定义,这些默认值定义是使用 ALTER TABLE 或 CREATE TABLE 的 DEFAULT 关键字创建的。

Transact-SQL 语法约定

语法

  
CREATE DEFAULT [ schema_name . ] default_name   
AS constant_expression [ ; ]  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

schema_name
default 所属架构的名称。

default_name
default 的名称。 默认值名称必须遵守标识符规则。 可以选择是否指定默认值所有者名称。

constant_expression
只包含常量值的表达式(不得包含任何列或其他数据库对象的名称)。 可以使用任何常量、内置函数或数学表达式,除非它们包含别名数据类型。 不得使用用户定义的函数。 将字符和日期常量放在单引号 (') 中;不需要将货币、整数和浮点常量放在引号内。 二进制数据必须以 0x 开头,货币数据必须以美元符号 ($) 开头。 默认值必须与列数据类型兼容。

备注

只能在当前数据库中创建 default 名称。 按照架构,在数据库内默认值名称必须是唯一的。 创建 default 时,使用 sp_bindefault 将它绑定到列或别名数据类型。

如果 default 与其绑定到的列不兼容,SQL Server 便会在尝试插入 default 值时生成错误消息。 例如,N/A 无法用作数值列的 default。

如果 default 值对于它绑定到的列而言太长,值便会遭截断。

无法在单个批处理中结合使用 CREATE DEFAULT 语句与其他 Transact-SQL 语句。

必须先删除 default,然后才能创建同名的新 default。 此外,必须先通过执行 sp_unbindefault 来解除绑定 default,然后才能删除它。

如果列同时有默认值以及与之关联的规则,则默认值不能违反该规则。 永远不会插入与规则冲突的默认值,每次试图插入这样的默认值时,SQL Server 都会生成错误消息。

当绑定到列以后,在以下情况下将插入默认值:

  • 值不是显式插入。

  • 在 INSERT 中使用 DEFAULT VALUES 或 DEFAULT 关键字来插入默认值。

如果在创建列时指定 NOT NULL,且没有为它创建 default,便会在用户无法在此列中输入内容时生成错误消息。 下表说明默认值的存在与将列定义为 NULL 或 NOT NULL 之间的关系。 表中的项显示了结果。

列定义 没有输入项,没有默认值 没有输入项,有默认值 输入 NULL,没有默认值 输入 NULL,有默认值
NULL Null 默认值 Null Null
NOT NULL 错误 默认值 error error

若要重命名默认值,请使用 sp_rename。 若要获得默认值的报告,请使用 sp_help

权限

若要使用 CREATE DEFAULT,用户至少必须在当前数据库中拥有 CREATE DEFAULT 权限,并对在其中创建 default 的架构拥有 ALTER 权限。

示例

A. 创建简单的字符默认值

以下示例创建名为 unknown 的字符默认值。

USE AdventureWorks2022;  
GO  
CREATE DEFAULT phonedflt AS 'unknown';  

B. 绑定默认值

以下示例绑定在示例 A 中创建的默认值。只有当没有为 Phone 表的 Contact 列指定项时,默认值才会生效。

注意

省略任意项与在 INSERT 语句中显式声明 NULL 不同。

由于不存在名为 phonedflt 的 default,因此无法执行以下 Transact-SQL 语句。 本例只用于演示。

USE AdventureWorks2022;  
GO  
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)