CREATEDEFAULT(转)

本文介绍如何使用CREATEDEFAULT命令创建默认值对象,这些对象可在插入数据时自动填充未提供的值。文章详细解释了语法、参数及注意事项。
CREATEDEFAULT(转)[@more@]

  创建称为默认值的对象。当绑定到列或用户定义数据类型时,如果插入时没有明确提供值,默认值便指定一个值,并将其插入到对象所绑定的列中(或者,在用户定义数据类型的情况下,插入到所有列中)。默认值是一个向后兼容的功能,它执行一些与使用 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 之间的关系。表中的条目显示了结果。

  

  2003.3.1.12.33.40.01.jpg

  说明 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'

  


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8403220/viewspace-954553/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8403220/viewspace-954553/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值