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

5.4 创建规则来实现约束

作者: 史创明、王俊伟 出处:清华大学出版社  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2007-04-07 15:48
关 键 词:SQL  SQL2000  微软  数据库
阅读提示:规则是数据库对象之一,它的作用与CHECK约束的部分功能相同,在向表的某列插入或更新数据时,用它来限制输入的新值的取值范围。

规则是数据库对象之一,它的作用与CHECK约束的部分功能相同,在向表的某列插入或更新数据时,用它来限制输入的新值的取值范围。规则与CHECK约束的不同之处在于:
“ CHECK约束是用DREATE TABLE语句在建表时指定的,而规则需要作为单独的数据库对象来实现。
“ 在一列上只能使用一个规则,但可以使用多个CHECK约束。
“ 规则可以应用于多个示例,还可以应用于用户自定义的数据类型,而CHECK约束只能应用于它定义的列。
规则是实现域完整性的方法之一,它用来验证一个数据库中的数据是否处于一个指定的值域范围内。当数据库中的数据被插入或更新时,需要检查这个新值是否遵循规则,如果违反了规则,那么这一操作将会失败。
5.4.1  创建规则
在创建规则时,用户可以通过两种方法,一是使用CREATE RULE语句;二是使用企业管理器。
1.使用CREATE RULE语句创建规则
用户可以使用CREATE RULE语句来创建规则,CREATE RULE语句不能与其他Transact-SQL语句组合使用。规则不适用于在创建规则时已存在于数据库中的数据,而且规则不能绑定到系统数据类型。规则只能在当前的数据库中创建,其语法格式如下:

CREATE RULE rule
AS condition_expression

其参数说明如下:
“ rule  是新规则的名称。规则名称必须符合标识符规则。可以选择是否指定规则所有者的名称。
“ condition_expression  是定义规则的条件。规则可以是WHERE子句中任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和谓词(如IN、LIKE、BETWEEN)之类的元素。规则不能引用列或其他数据库对象。可以包含不引用数据库对象的内置函数。
condition_expression包含一个变量。每个局部变量的前面都有一个@符号。该表达式引用通过UPDATE或INSERT语句输入的值。在创建规则时,可以使用任何名称或符号表示值,但第一个字符必须是@符号。
下面我们以“图书管理系统”数据库为例,为“学生信息表”表中的【姓名】字段的约束,而创建一个name1规则。例如,我们将姓名约束到0至10个字符。

CREATE RULE name1
AS @姓名 BETWEEN 0 and 10

示意图
下面创建一个leibie规则来约束“图书明细表”中的【类别编号】字段,来约束其字段值必须在类别种类内容。
USE 图书管理系统
GO
CREATE RULE leibie
AS @类别编号 IN('1','2','3',
'4','5','6','7','8')

2.使用企业管理器创建规则

示意图
用户也可以通过企业管理器来创建规则,其操作步骤如下:
首先,打开【企业管理器】窗口,并展开树型目录选项。在“图书管理系统”数据库目录中,右击【规则】项,选择【新建规则】命令,如图5-36所示。
然后,在弹出的【规则属性】对话框中,用户可以输入规则的名称,在【文本】文本框中输入约束的条件。例如,我们在【规则属性】对话框中,输入【名称】为“单价”,并在文本框中输入“@单价>=0 and @单价<=150”,如图5-37所示,单击【确定】按钮。
5.4.2  绑定规则
规则创建后,需要将其绑定到列上或者用户自定义数据类型上,当向绑定了规则的列或者使用绑定了规则的用户自定义数据类型的所有列插入或者更新数据时,新的数据必须符合规则。
在绑定时,用户也可以通过使用sp_bindrule语句和企业管理器的方法来绑定规则到列中。
1.使用sp_bindrule语句绑定规则
使用系统存储过程sp_bindrule可以将规则绑到列或者用户自定义的数据类型上。其语法如下:
sp_bindrule [ @rulename = ] 'rule' ,
[ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]

其参数说明如下:
“ [@rulename =] 'rule'  由 CREATE RULE 语句创建的规则名称。rule 的数据类型为 nvarchar(776),无默认值。
“ [@objname =] 'object_name'  绑定了规则的表和列或用户定义的数据类型。object_name的数据类型为nvarchar(517),无默认值。如果object_name没有采取table.column 格式,则认为它属于用户定义数据类型。默认情况下,用户定义的数据类型的现有列继承rule,除非直接在列上绑定了规则。
“ [@futureonly =] 'futureonly_flag'  仅当将规则绑定到用户定义的数据类型时才使用。future_only_flag的数据类型为varchar(15),默认值为NULL。将此参数设置为futureonly时,它会防止用户定义数据类型的现有列继承新规则。如果futur-
eonly_flag为NULL,那么新规则将绑定到用户定义数据类型的每一列,条件是此数据类型当前无规则或者使用用户定义数据类型的现有规则。

示意图

下面我们将上面所创建的name1规则绑定到“图书管理系统”数据库中“学生信息表”表的【姓名】字段。
USE 图书管理系统
EXEC sp_bindrule 'name1','学生信息表姓名'

对于用户定义数据类型,只有尝试在该类型的数据库列中插入值,或更新该类型的数据库列时,绑定到该类型的规则才会激活。因为规则不检验变量,所以在向用户定义数据类型的变量赋值时,不要赋予绑定到该数据类型的列的规则所拒绝的值。
2.使用企业管理器绑定规则
接下来,我们通过企业管理器窗口将“单价”规则绑定到“图书明细表”中的【定价】字段。
首先,打开【企业管理器】窗口,并展开树型目录选项。在“图书管理系统”数据库目录中,选择【规则】项。其次在【控制台目录列表】中双击【单价】规则,打开【规则属性】对话框,如图5-38所示。
然后,在【规则属性】对话框中,单击【绑定列】按钮。打开【将规则绑定到列】对话框,并在该对话框的【列】列表中选择【[dbo].[图书明细表]】选项,如图5-39所示。
最后,在【将规则绑定到列】对话框中,选择未绑定的列的【定价】字段,并单击【添加】按钮,将其添加到绑定列中去,如图5-40所示。单击【确定】按钮,返回到【规则属性】对话框,单击该对话框中的【确定】按钮。

示意图
示意图

5.4.3  删除规则
对于不再使用的规则,可以使用DROP RULE语句删除。要删除规则,首先要解除对该规则的绑定,解除规则的绑定可以使用sp_unbindrule存储过程,其语法格式如下:
sp_unbindrule [@objname =] 'object_name'
[, [@futureonly =] 'futureonly_flag']

其参数说明如下:
“ [@objname =] 'object_name'  要解除的规则绑定的表和列或者用户定义数据类型的名称。object_name的数据类型为nvar-
char(776),无默认值。如果参数不是table.
column的形式,则假定object_name为用户定义数据类型。当为用户定义数据类型解除规则绑定时,所有属于该数据类型并具有相同规则的列也同时解除规则绑定。对属于该数据类型的列,如果其规则直接绑定到列上,则该列不受影响。
“ [@futureonly =] 'futureonly_flag'  仅用于解除用户定义数据类型规则的绑定。futureonly_flag的数据类型为varchar(15),其默认值为NULL。当参数futureonly_flag为futureonly时,现有的属于该数据类型的列不会失去指定规则。

下面我们可以通过sp_unbindrule存储过程将“图书管理系统”数据库中的【定价】字段所绑定的“单价”规则解除,并删除该规则。

USE 图书管理系统
GO
EXEC sp_unbindrule '图书明细表.定价'
解除规则的绑定后,就可以使用DROP RULE语句删除。
DROP RULE 单价



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

匿名发表

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


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