规则是数据库对象之一,它的作用与CHECK约束的部分功能相同,在向表的某列插入或更新数据时,用它来限制输入的新值的取值范围。规则与CHECK约束的不同之处在于:
“ CHECK约束是用DREATE TABLE语句在建表时指定的,而规则需要作为单独的数据库对象来实现。
“ 在一列上只能使用一个规则,但可以使用多个CHECK约束。
“ 规则可以应用于多个示例,还可以应用于用户自定义的数据类型,而CHECK约束只能应用于它定义的列。
规则是实现域完整性的方法之一,它用来验证一个数据库中的数据是否处于一个指定的值域范围内。当数据库中的数据被插入或更新时,需要检查这个新值是否遵循规则,如果违反了规则,那么这一操作将会失败。
5.4.1 创建规则
在创建规则时,用户可以通过两种方法,一是使用CREATE RULE语句;二是使用企业管理器。
1.使用CREATE RULE语句创建规则
用户可以使用CREATE RULE语句来创建规则,CREATE RULE语句不能与其他Transact-SQL语句组合使用。规则不适用于在创建规则时已存在于数据库中的数据,而且规则不能绑定到系统数据类型。规则只能在当前的数据库中创建,其语法格式如下:
CREATE RULE rule |
其参数说明如下:
“ rule 是新规则的名称。规则名称必须符合标识符规则。可以选择是否指定规则所有者的名称。
“ condition_expression 是定义规则的条件。规则可以是WHERE子句中任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和谓词(如IN、LIKE、BETWEEN)之类的元素。规则不能引用列或其他数据库对象。可以包含不引用数据库对象的内置函数。
condition_expression包含一个变量。每个局部变量的前面都有一个@符号。该表达式引用通过UPDATE或INSERT语句输入的值。在创建规则时,可以使用任何名称或符号表示值,但第一个字符必须是@符号。
下面我们以“图书管理系统”数据库为例,为“学生信息表”表中的【姓名】字段的约束,而创建一个name1规则。例如,我们将姓名约束到0至10个字符。
CREATE RULE name1 |
![]() |
| 示意图 |
USE 图书管理系统 |
2.使用企业管理器创建规则
![]() |
| 示意图 |
sp_bindrule [ @rulename = ] 'rule' , |
其参数说明如下:
“ [@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,那么新规则将绑定到用户定义数据类型的每一列,条件是此数据类型当前无规则或者使用用户定义数据类型的现有规则。
![]() |
| 示意图 |
USE 图书管理系统 |
对于用户定义数据类型,只有尝试在该类型的数据库列中插入值,或更新该类型的数据库列时,绑定到该类型的规则才会激活。因为规则不检验变量,所以在向用户定义数据类型的变量赋值时,不要赋予绑定到该数据类型的列的规则所拒绝的值。
2.使用企业管理器绑定规则
接下来,我们通过企业管理器窗口将“单价”规则绑定到“图书明细表”中的【定价】字段。
首先,打开【企业管理器】窗口,并展开树型目录选项。在“图书管理系统”数据库目录中,选择【规则】项。其次在【控制台目录列表】中双击【单价】规则,打开【规则属性】对话框,如图5-38所示。
然后,在【规则属性】对话框中,单击【绑定列】按钮。打开【将规则绑定到列】对话框,并在该对话框的【列】列表中选择【[dbo].[图书明细表]】选项,如图5-39所示。
最后,在【将规则绑定到列】对话框中,选择未绑定的列的【定价】字段,并单击【添加】按钮,将其添加到绑定列中去,如图5-40所示。单击【确定】按钮,返回到【规则属性】对话框,单击该对话框中的【确定】按钮。
![]() |
| 示意图 |
![]() |
| 示意图 |
sp_unbindrule [@objname =] 'object_name' |
其参数说明如下:
“ [@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 图书管理系统 |
| 回书目 上一节 下一节 |
|
· SQL Server入门到精通.. · 交换技术配置手册技术.. · 超级网管员——网络应.. · 网络服务器配置与应用.. · Linux集群技术自测试题.. · JavaSript核心技术自测.. |
· ARP攻击与防范技术自测.. · 国庆挑战自己参加自测 .. · 《网管员必读—网络应.. · 历次技术自测 获奖网友.. · 51CTO国庆七天技术自测.. · 9.2.2 无线AP |
|
|||
| · 网管系统介绍 · 网络管理系统如何支撑I.. · CISSP认证成长之路 · 51CTO国庆充电专题之好.. · 网络技术经典基础教程 · 51CTO主编推荐经典专题 · RAID——磁盘阵列基础 · 充电计划之热门IT认证.. |
· 51CTO技术自测 挑战自.. · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 2007年互联网大会 · 我是黑客我怕谁——讲.. · ARP攻击防范与解决方案 · Solaris 10 配置管理 · Solaris基础知识入门 |
||
|
|||
| · Java基础教程 · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · RAID——磁盘阵列基础 |
· 三层交换技术专题 · SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · C#技术开发指南 · Solaris 10 配置管理 |
||
|
|||
| · ARP攻击防范与解决方案 · VPN技术 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · RAID——磁盘阵列基础 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| ·体验Windows Server 2008.. ·将超星图书转成PDF文档 |
·使用 Office Communicati.. ·VMware Workstation 6.01.. |
| ·强烈质疑“步行1公里就能.. ·国庆期间新闻回顾:微软.. |
·9月第3周回顾:微软和英.. ·9月第2周回顾:四核之战.. |
| · 华为、贝恩资本22亿美元.. · NGN:下一代网络 · 网络访问中断大排查 |
· 教你使用Anti ARP Sniff.. · 网络嗅探教程:使用Snif.. · 常见病毒手工清除方法大.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 · Solaris基础知识入门 |
· Google推出唯一硬件——.. · 硬盘之父获得诺贝尔物理.. · 理性面对四核服务器选购 |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 硬盘之父获得诺贝尔物理.. · 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. |