您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > sqlserver规则Rule的创建和使用
SqlServer中规则Rule规则的概念:规则(Rules)是用于执行一些与检查约束相同的功能。检查约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个检查约束。检查约束可以在CREATETABLE语句中定义,而规则作为独立的对象创建,然后绑定在指定的列上。规则也是维护数据库中数据完整性的一种手段,使用它可以避免表中出现不符合逻辑的数据,例如工资小于0。创建规则:使用CREATERULE语句可以创建规则,其语法结构如下:CREATERULE架构名.规则名AS规则表达式规则表达式中可以包含算术运算符、关系运算符和谓词(例如IN、LIKE、BETWEEN等)。例:创建一个规则SexRule,指定变量@sex的取值只能为'男'或'女',代码如下:CREATERULESexRuleAS@sexIN('男','女')例:创建一个规则WageRule,指定变量@wage的取值范围为0~50000,代码如下:CREATERULEWageRuleAS@wageBETWEEN0AND50000绑定规则:绑定规则是指将已经存在的规则应用到列或用户自定义的数据类型中。使用存储过程sp_bindrule可以将规则绑定到列或用户自定义的数据类型,语法如下:sp_bindrule[@rulename=]规则名,[@objname=]对象名例:规则SexRule绑定到表Employees的列Sex上的语句如下:USEHrSystemGOEXECsp_bindrule'SexRule','Employees.Sex'GO执行的结果如下:已将规则绑定到表的列。例:下面通过一个INSERT语句验证规则的应用效果。执行下面的INSERT语句,向表Employees中插入一条记录。USEHrSystemGOINSERTINTOEmployees(Emp_name,Sex,Title,Wage,IdCard,Dep_id)VALUES('小李','无','职员',10000,'110123xxxx',1)GO注意,INSERT语句设置列Sex的值为“无”。因为列Sex绑定到规则SexRule,而在规则SexRule中规定列值只能是“男”或“女”。因此,执行INSERT语句的结果如下:消息513,级别16,状态0,第2行列的插入或更新与先前的CREATERULE语句所指定的规则发生冲突。该语句已终止。冲突发生于数据库'HrSystem',表'dbo.Employees',列'Sex'。语句已终止。返回结果中提示INSERT语句中指定的列Sex的指定值('无')不满足之前绑定的规则。解除规则绑定:使用存储过程sp_unbindrule可以解除规则的绑定,它的基本语法如下:sp_unbindrule[@objname=]对象名对象名可以是表名和列名,也可以是自定义的数据类型。例:使用存储过程sp_unbindrule取消表Employees的列Sex上绑定的规则,具体语句如下:USEHrSystemGOEXECsp_unbindrule'Employees.Sex'GO执行的结果如下:(所影响的行数为1行)已从表的列上解除了规则的绑定。删除规则:在SQLServerManagementStudio中,右键单击指定的规则,在弹出菜单中选择“删除”项则删除指定的规则对象。也可以使用DROPRULE语句从当前数据库中删除一个或多个规则,语法如下:DROPRULE规则名1[,规则名2,...,规则名n]在删除规则前,需要调用sp_unbindrule存储过程解除该规则的绑定。例:使用DROPRULE删除规则SexRule,具体语句如下:USEHrSystemEXECsp_unbindrule'Employees.Sex'DROPRULESexRule规则仅对EXECsp_bindrule'SexRule','Employees.Sex'绑定以后insert和update会进行检查。并不检查以前的原有的表数据。比如表原本就有Sex=’无’的数据。此时执行EXECsp_bindrule'SexRule','Employees.Sex'是可以的只是以后的insert和update会判定性别只能是’男’或者‘女’而constraint的check约束将强制数据一致比如规定表A的ID要小于3。如果表中已经有大于3的数据altertableA_Rule_TestaddconstraintCHK_Test_IDcheck(Id3)--则check约束将无法添加。而rule则可以添加。当insert一条语句时,先检查规则,然后再检查check约束
本文标题:sqlserver规则Rule的创建和使用
链接地址:https://www.777doc.com/doc-5388521 .html