频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

5.3 默认值

作者: 史创明、王俊伟 出处:清华大学出版社  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2007-04-07 13:53
关 键 词:SQL  SQL2000  微软  数据库
阅读提示:SQL Server提供的默认值有助于处理用户不含全部表列的INSERT操作。默认值的使用方法与规则非常相似,它也可以通过和表列或者用户自定义数据类型进行绑定,对新增加的数据进行约束。在使用默认值时,首先需要在数据中创建一个默认值,然后将默认值与特定的表列绑定。

SQL Server提供的默认值有助于处理用户不含全部表列的INSERT操作。默认值的使用方法与规则非常相似,它也可以通过和表列或者用户自定义数据类型进行绑定,对新增加的数据进行约束。在使用默认值时,首先需要在数据中创建一个默认值,然后将默认值与特定的表列绑定。
如果在插入行时没有指定列的值,则默认值指定列中所使用的值。默认值可以是任何取值为常量的对象。
在SQL Server中,有两种使用默认值的方法:
“ 在创建表时,指定默认值。如果使用企业管理器,则可以在设计表时指定默认值。如果使用T-SQL语言,则在CREATE TABLE语句中使用DEFAULT子句。这是首选的方法,也是定义默认值比较简洁的方法。
“ 使用CREATE DEFAULT语句创建默认对象,然后使用存储过程sp_bindefault将该默认对象绑定到列上。这是向前兼容的方法。
5.3.1 在创建表时指定默认值

示意图
在向新的数据表中录入记录信息时,用户可以通过两种方法来设置该字段的默认值。一是使用【企业管理器】时,在【表设器】对话框中,设置该字段的值;二是通过T-SQL语句来设置某个字段的默认值。
用户在使用企业管理器创建表时,可以在输入字段名后,设置将该字段的默认值。下面通过设置“经销商”数据库中的“商品信息表”中的字段来学习其方法。
操作步骤:
在【企业管理器】窗口中,依次展开树型目录,并双击“经销商”数据库中的【表】选项。然后右击【控制台目录列表】中的【商品信息表】表,选择【设计表】命令。
在弹出的【表设计器】对话框中,用户可以选择【商品名称】行或者在创建该行后,在【列】属性面板中输入【默认值】为“('暂无')”,也可以直接输入“暂无”,如图5-24所示。
选择【单位】字段,并将其设置为0;然后选择【商品单位】字段,将其设置为“无”。
打开【商器信息表】的【表数据】对话框,并添加一条记录:【商品编号】为1057;【供应商代号】为5,单击【表数据】对话框标题栏上的【关闭】按钮。然后,重新打开该对话框,将显示出1057行中的默认值,如图5-25所示。
示意图

5.3.2 使用默认对象
默认对象也称为默认值,是单独存储的,删除表的时候,DEFAULT约束会自动删除,但是默认对象不会被删除。另外,创建默认对象后,需要将其绑定到某列或者用户自定义的数据类型上。
下面我们通过T-SQL语句和企业管理器来使用默认对象。
示意图

1.使用Transact-SQL管理默认值
使用T-SQL语句创建默认值语句如下:
CREATE DEFAULT  default_name   /*默认值对象*/
AS default_description /*只包含常量值的表达式*/

其中主要参数说明如下:
“ default_name 为默认值对象的名称。
“ default_description 是任意数据类型的常量、内置函数或数学表达式。字符和日期常量用单引号(')引起来;货币、整数和浮点常量不需要使用引号。二进制数据必须以0x开头,货币数据必须以美元符号($)开头。默认值必须与列数据类型兼容。
下面是一个使用CREATE DEFAULT创建默认值对象的例子。例如,我们创建“库存量”默认对象,该默认值用来约束“库存表”中的“库存量”字段,在默认状态下,其值为0。

USE 经销商
Go
CREATE DEFAULT 库存量 As 0

上面的语句在“经销商”数据库中创建了一个“库存量”的默认值,在查询分析器中执行结果为“命令已成功完成。”信息。
用户可以打开【企业管理器】窗口,右击【库存表】表,选择【设计表】命令。在打开的【表设计器】对话框中,用户可以选择某行,单击【列】属性面板中的【默认值】列表选择默认对象,如图5-26所示。
另外,用户也可以在【表数据】对话框中,添加一条记录,当我们输入【库存数量】字段时,其值默认为0,如图5-27所示。
2.使用企业管理器创建默认对象
下面我们在“经销商”数据库中创建一个默认对象。
操作步骤
启动企业管理器,展开服务器组,并展开相应的服务器,以及“经销商”数据库。
在“经销商”数据库目录中,右击【默认值】项,选择【新建默认值】命令,如图5-28所示。
在弹出的【默认属性】对话框中,输入【名称】为“进货时间”,【值】为getdate( ),如图5-29所示。

示意图
示意图

在【默认属性】对话框中,设置完毕后,单击该对话框的【确定】按钮。
3.绑定默认对象
当用户创建好默认对象后,需要将其对象绑定到某列或者用户自定义的数据类型上。绑定的方法,用户可以使用企业管理器来完成,也可以使用sp_bindefault存储过程来完成。
(1)使用企业管理器
使用企业管理器绑定一个默认对象的操作步骤如下:
启动企业管理器,展开服务器组及服务器,然后打开“经销商”数据库中的【默认值】项。
在【控制台目录列表】窗口双击【进货时间】默认对象,打开【默认属性】对话框,如图5-30所示。
在【默认属性】对话框中单击【绑定列】按钮,打开【将默认值绑定到列-进货时间】对话框,如图5-31所示。
在【将默认值绑定到列-进货时间】对话框中,单击【表】下拉列表按钮,选择【[dbo].[进货表]】选项,如图5-32所示。
此时,在【将默认值绑定到列】对话框中选择【未绑定的列】中的【进货时间】字段,单击【添加】按钮,将该字段添加到绑定列列表中,如图5-33所示。
示意图

设置完绑定列后,单击【确定】按钮。在绑定过程中,用户可以单击【删除】按钮,清除绑定列。返回到【默认属性-进货时间】对话框,单击【应用】按钮或者单击【确定】按钮。
如果将默认对象绑定到用户自定义数据类型上,则可以在【默认属性】对话框中,单击【绑定UDT】按钮,打开【将默认值绑定到用户定义的数据类型】对话框。
(2)使用sp_bindefault存储过程
使用sp_bindefault存储过程在不取消绑定现有默认值的情况下,将新默认值绑定到列(尽管最好使用DEFAULT约束)或者绑定到用户定义的数据类型,原有默认值将被替代。
另外,用户不能将默认值绑定到SQL Server数据类型。如果默认值和要绑定的列不兼容,那么在试图插入默认值时(不是在绑定时),SQL Server将返回错误信息。
除非直接绑定了默认值或者将futureonly_flag指定为futureonly,否则用户定义数据类型的现有列将继承新默认值。用户定义数据类型的新列始终继承默认值。
当运行语成功时,返回0,否则失败返回1。
使用sp_bindefault存储过程绑定列的格式如下:
sp_bindefault [ @defname = ] 'default' ,
[ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]

其中主要参数说明如下:
“ [@defname =] 'default' 由CREATE DEFAULT语句创建的默认名称。default的数据类型为 nvarchar(776),无默认值。
“ [@objname =] 'object_name' 要绑定默认值的表和列名称或用户定义的数据类型。object_name 的数据类型为nvarchar(517),无默认值。如果object_name没有采用table.column格式,则认为它属于用户定义数据类型。默认情况下,用户定义数据类型的现有列继承default,除非默认值直接绑定到列中。默认值无法绑定到timestamp数据类型的列、带IDENTITY属性的列或者已经有DEFAULT约束的列。
“ [@futureonly =] 'futureonly_flag' 仅在将默认值绑定到用户定义的数据类型时才使用。futureonly_flag的数据类型为 varchar(15),默认值为NULL。将此参数设置为 futureonly 时,它会防止现有的属于此数据类型的列继承新的默认值。当将默认值绑定到列时不会使用此参数。如果 futureonly_flag为NULL,那么新默认值将绑定到用户定义数据类型的任一列,条件是此数据类型当前无默认值或者使用用户定义数据类型的现有默认值。

下面首先创建一个“售出时间”默认对象,然后让其【值】等于getdate( )函数,然后将所创建的【售出时间】默认对象绑定到“销售表”中的【售出时间】字段。

USE 经销商
EXEC sp_bindefault '售出时间','销售表.售出时间'

其执行查询结果为“已将默认值绑定到列”。
接下来,我们打开“销售表”的【表数据】对话框,在该对话框中添加一条记录【销售编号】为1057时,其【售出时间】字段将自动获取当前日期,如图5-34所示。
另外,用户也可以在【查询】窗口中,输入“EXEC sp_help售出时间”命令,来查看【售出时间】默认对象信息,如图5-35所示。

示意图

4.解除默认对象的绑定
解除默认值绑定时,如果默认值绑定到列,则绑定信息从表syscolumns中删除。如果默认值绑定到用户定义数据类型,则绑定信息从表systypes中删除。
使用sp_unbindefault解除绑定列的格式如下:
sp_unbindefault [@objname=]'object_name'
[,[@futureonly =] 'futureonly_flag']

其中主要参数说明如下:
“ [@objname =] 'object_name' 要解除默认值绑定的表和列或者用户定义数据类型的名称。object_name的数据类型为nvarchar(776),无默认值。如果参数不是 table.column的形式,则假定object_name为用户定义数据类型。当为用户定义数据类型解除默认值绑定时,所有属于该数据类型并具有相同默认值的列也同时解除默认值绑定。对属于该数据类型的列,如果其默认值直接绑定到列上,则该列不受影响。
“ [@futureonly =] 'futureonly_flag' 仅用于解除用户定义数据类型默认值的绑定。futureonly_flag的数据类型为varchar(15),其默认值为NULL。当参数futureonly_flag为futureonly时,现有的属于该数据类型的列不会失去指定默认值。
下面我们通过使用sp_unbindefault语句来解除“销售表”中的【售出时间】字段所绑定的默认对象,其语句如下:

USE 经销商
EXEC sp_unbindefault '销售表.售出时间'

执行查询结果为“已从表的列上解除了默认值的绑定。(所影响的行数为1行)”。

示意图

5.删除默认对象
在删除默认对象之前,首先要确定默认对象已经解除绑定。删除默认对象使用DROP DEFAULT语句,其语法格式如下:
DROP DEFAULT { default } [ ,...n ]

示意图
其中,DEFAULT是现有默认值的名称。若要查看现有默认值的列表,请执行sp_help。默认值必须符合标识符规则。有关更多信息,请参见使用标识符。可以选择是否指定默认值所有者名称。
下面我们使用“经销商”数据库为例,使用SQL语句直接删除“售出日期”默认对象:
USE 经售商
DROP DEFAULT 售出时间


回书目   上一节   下一节
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有