默认
默认是一种数据库对象,可以被绑定到一个或多个列上,还可以绑定到用户自定义类型上。当某个默认创建后,可以反复使用。当向表中插入数据时,如果绑定有默认的列或者数据类型没有明确提供值,那么就将以默认指定的数据插入。定义的默认值必须与所绑定列的数据类型一致,不能违背列的相关规则。
1. 默认值的创建
利用T-SQL语句创建默认的语法格式如下。
CREATE DEFAULT default_name
AS Expression
例如:创建学时数为60的默认,语句为:CREATE DEFAULT 学时数 AS 60。
2.绑定和解绑默认值
一个建好的默认值,只有绑定到表的列上或用户自定义的数据类型上后才起作用,如果不再需要该默认值,则要将该默认值从相应的列或自定义数据类型上解绑。利用命令的方式来绑定默认和解除绑定默认。
其语法格式如下:
[EXECUTE]
sp_bindefault 'default_name' ,
'table_name.column_name'︱
'userdefined_data_type'
[EXECUTE]
sp_unbindefault
'table_name.filed_name'︱
'userdefined_data_type'
3.删除默认值
可以用DROP DEFAULT语句删除默认值对象。
其语法格式如下
DROP DEFAULT default_name[,…]
注意:在删除一个默认值之前,应首先将它从所绑定的列或自定义数据类型上解绑,否则系统会报错。
规则
规则是保证域完整性的主要手段,它类似于CHECK约束。与CHECK约束相比,其执行功能相同。
CHECK约束是使用ALTER或CREATE TABLE的CHECK关键字创建的,是对列中的值进行限制的首选标准方法(可以对一列或多列定义多个约束)。规则是一种数据库对象,可以绑定到一列或多个列上,还可以绑定到用户自定义数据类型上,规则定义之后可以反复使用。
列或用户自定义数据类型只能有一个绑定的规则。但是,列可以同时具有规则和多个CHECK约束。
1.规则的创建
利用T-SQL语句创建规则的语法格式如下。
CREATE RULE rule_name AS expression
2.绑定和解绑规则
绑定和解绑规则可以使用图形界面方法,也可以利用T-SQL语句。其语法格式如下。
sp_bindrule
'rule_name', 'table_name.filed_name'|
'userdefined_data_type'
sp_unbindrule
'table_name.filed_name''|
'userdefined_data_type'
3.删除规则
由于规则是数据库对象,因此与默认一样可以利用ManagementStudio的“对象资源管理器”展开节点到规则,单击右键,在快捷菜单中选择“删除”,这里我们主要介绍利用T-SQL语句删除规则。其语法格式如下。
DROP RULE rule_name [,…]
标识列
表中的主键和唯一键都可以起到表中记录的标识作用,有时为了方便可以让计算机为表中的记录按照要求自动地生成标识字段的值,
IDENTITY列即自动编号列。若在表中创建一个IDENTITY(标识符)列,则当用户向表中插入新的数据行时,系统自动为该行的IDENTITY列赋值,并保证其值在表中的唯一性。每个表中只能有一个IDENTITY列,其列值不能由用户更新,不允许空值,也不允许绑定默认值或建立DEFAULT约束。IDENTITY列常与PRIMARY KEY约束一起使用,从而保证表中各行具有唯一标识。
标识列的有效数据类型可以是任何整数数据类型分类的数据类型(bit数据类型除外),也可以是decimal数据类型,但不允许出现小数。
定义标示列的方法有:
(1)利用Management Studio定义IDENTITY列
(2)利用T-SQL语句创IDENTITY列
其语法格式如下。
CREATE TABLE table_name
(column_name data_type
IDENTITY
[(initial_value,Incremental)] [,…])
自定义数据类型
在创建和修改表时,要对表的字段指定或修改数据类型,在进行域完整性控制中,用户经常需要在系统数据类型的基础上加上适当的限制,例如前面所讲的在“电话”字段上,如果有多个表中均在此字段,并且对数据的约束要求是相同的,就要创建相应的规则,并将规则绑定到每个“电话”字段上,实际上对于多个表中多个字段具有相同限制的情况,用自定义数据类型的方式来实现更为简洁。
在定义数据类型时,需要指定该类型的名称、使用的系统数据类型以及是否为空等,同时默认值和规则可以绑定在自定义的数据类型上。
其定义与删除的语法格式如下:
Execsp_addtype
type_name
'system_data_type',
'null|not null'
[EXECUTE]
sp_droptype
defined_data_type[,…n]
需要说明的是,在删除自定义数据类型之前,必须首先取消表定义中对自定义数据类型的使用,否则删除操作将无法正确完成。

