江湖浪人 发表于 2016-11-2 02:43:12

SQL Server 中规则的使用

  规则的概念:
  
规则(Rules)是用于执行一些与检查约束相同的功能。检查约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个检查约束。
检查约束可以在CREATE TABLE语句中定义,而规则作为独立的对象创建,然后绑定在指定的列上。
规则也是维护数据库中数据完整性的一种手段,使用它可以避免表中出现不符合逻辑的数据,例如工资小于0。



创建规则:  
  
  使用CREATE RULE语句可以创建规则,其语法结构如下:
  CREATERULE <架构名>.<规则名>
  AS<规则表达式>
  规则表达式中可以包含算术运算符、关系运算符和谓词(例如IN、LIKE、BETWEEN等)。
  例:
  创建一个规则SexRule,指定变量@sex的取值只能为'男'或'女',代码如下:
  CREATERULE SexRule
  AS@sex IN ('男', '女')
例:  创建一个规则WageRule,指定变量@wage的取值范围为0~50000,代码如下:
  
  CREATERULE WageRule
  AS@wage BETWEEN 0 AND 50000
  

  绑定规则:
  
绑定规则是指将已经存在的规则应用到列或用户自定义的数据类型中。使用存储过程sp_bindrule可以将规则绑定到列或用户自定义的数据类型,语法如下:
  
  sp_bindrule [ @rulename = ]规则名,
  [ @objname = ]对象名
例:  
规则SexRule绑定到表Employees的列Sex上的语句如下:
  
  USE HrSystem
  GO
  EXECsp_bindrule 'SexRule', 'Employees.Sex'
  GO
  执行的结果如下:
  已将规则绑定到表的列。
  例:

  下面通过一个INSERT语句验证规则的应用效果。执行下面的INSERT语句,向表Employees中插入一条记录。
  
  USEHrSystem
  GO
  INSERTINTO Employees (Emp_name, Sex, Title, Wage,IdCard,Dep_id)
  VALUES('小李', '无', '职员',10000, '110123xxxx', 1)
  GO
注意,INSERT语句设置列Sex的值为“无”。因为列Sex绑定到规则SexRule,而在规则SexRule中规定列值只能是“男”或“女”。因此,执行INSERT语句的结果如下:
  消息513,级别16,状态0,第2行
  列的插入或更新与先前的CREATE RULE语句所指定的规则发生冲突。该语句已终止。冲突发生于数据库'HrSystem',表'dbo.Employees',列'Sex'。
  语句已终止。
返回结果中提示INSERT语句中指定的列Sex的指定值('无')不满足之前绑定的规则。
  

  解除规则绑定:
  
使用存储过程sp_unbindrule可以解除规则的绑定,它的基本语法如下:
  
  sp_unbindrule[ @objname = ]对象名
对象名可以是表名和列名,也可以是自定义的数据类型。
  例:

  使用存储过程sp_unbindrule取消表Employees的列Sex上绑定的规则,具体语句如下:
  
  USE HrSystem
  GO
  EXECsp_unbindrule 'Employees.Sex'
  GO
执行的结果如下:
  (所影响的行数为1 行)
  已从表的列上解除了规则的绑定。

删除规则:  
在SQL Server Management Studio中,右键单击指定的规则,在弹出菜单中选择“删除”项则删除指定的规则对象。
也可以使用DROP RULE语句从当前数据库中删除一个或多个规则,语法如下:
  
  DROPRULE 规则名1 [,规则名2, ...,规则名n]
在删除规则前,需要调用sp_unbindrule存储过程解除该规则的绑定。
例:  使用DROP RULE删除规则SexRule,具体语句如下:
  
  USE HrSystem
  EXECsp_unbindrule 'Employees.Sex'
  DROPRULE SexRule

  

  
页: [1]
查看完整版本: SQL Server 中规则的使用