设为首页 收藏本站
查看: 772|回复: 0

[经验分享] SQL Server 中规则的使用

[复制链接]

尚未签到

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



创建规则:  
  
  使用CREATE RULE语句可以创建规则,其语法结构如下:
  CREATERULE <架构名>.<规则名>
  AS<规则表达式>
  规则表达式中可以包含算术运算符、关系运算符和谓词(例如INLIKEBETWEEN等)。
  例:
  创建一个规则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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294295-1-1.html 上篇帖子: 如何获得SQL Server索引使用情况 下篇帖子: 您访问的地址不存在 404 Not Found
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表