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

[经验分享] SQL Server中的规则对象

[复制链接]

尚未签到

发表于 2018-10-14 06:57:08 | 显示全部楼层 |阅读模式
  SQL Server中的规则对象
  规则对象的作用与CHECK约束相同,它检查用户为其所关联列或所绑定的用户定义数据类型列的输入可接受值的有效性。
  ● 一个规则定义可以出现在WHERE子句的表达式中;
  ● 每个列或每个用户定义数据类型只能绑定一个规则;
  ● 一个规则可以关联到一列或几列。

  规则对象和CHECK约束有些类似,但两者存在一些区别,CHECK约束是在用CREATE TABLE 或>  ◆创建规则对象
  ◆应用规则对象
  ◆ 解除和删除规则对象
  (1) 创建规则对象
  在T_SQL中,创建规则对象的语句格式:
  CREATE RULE [owner.] rule_name
  AS condition_expression
  其中:
  rule_name :规则名称。
  condition_expression:规则定义的条件。condition_expression表达式可以与所有有效的WHERE子句所指定的条件相同。它用一个局部变量代表INSERT语句或UPDATE语句所输入的数值。
  AS子句的变量名必须以@开头,而且要与所关联的列名或用户定义数据类型相同。
  例1, 下面语句所创建的规则限制用户输入的学生年龄在指定的范围为大于等于14岁而小于等于35岁。如下定义:
  CREATE RULE S_age_rule
  AS >= 14 @sage <= 35
  例2,下面语句所创建的规则限制用户输入的字符串只能在指定的列表条目中,即学生的课程必须是在集合('网络','数据库','编译原理','操作系统','软件工程','JAVA')中,@s_course为存放课程的局部变量。定义如下:CREATE RULE S_course_rule
  AS
  @s_course IN('网络','数据库','编译原理','操作系统','软件工程','JAVA')
  (2) 绑定和应用规则对象
  创建规则对象后,必须使用系统存储过程sp_bindrule把规则对象绑定到一个列或用户定义的数据类型才能起作用。语句格式:
  sp_bindrule rulename , objname [, futureonly]
  rulename:是规则名称
  objname:是规则所关联的表的列名或用户定义的数据类型名称. 如果Objname的格式为'表名.列名'说明是列名,否则视为用户定义的数据类型名。
  futureonly:只用于用户定义数据类型。且只对未来的值起作用,不影响已经存在的值。
  例如,以正确的课程集合值绑定学生课程列。
  sp_bindrule S_course_rule 'C.course'
  (3) 解除和删除规则对象
  要删除规则对象时,必须先解除规则对象与指定列或用户定义数据类型之间的关联。当一个规则对象与多个列或多个用户定义的数据类型相关联时,要逐一用sp_unbindrule 解除。解除规则与相应对象关联的格式:
  sp_unbindrule objname [, futureonly]
  futureonly:只用于用解除与户定义数据类型相关 联的规则。且只对未来的值起作用,不影响 已存在的数据类型列与规则之间的关联值。
  Objname: 相关联的列名或用户定义的数据类型名。
  例如, 解除学生课程C.course列与课程规则S_course_rule的关联。
  sp_unbindrule 'C.course'
  ● 删除规则对象的语句格式:
  DROP RULE [owner.] rule_name
  一个DROP 语句可以同时删除多个规则对象。
  例如,删除课程规则S_course_rule的语句如下:DROP RULE S_course_rule
  数据完整性方法的比较如图4-27
  图- 数据完整性方法的比较
数据完整性方法        功能        开支        事务之前或者之后     约束        中        低        之前     触发器        高        高        之后/之后     缺省和规则对象        低        中        之前

运维网声明 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-621262-1-1.html 上篇帖子: SQL Server实现Standby --日志传送(Log Shipping) 下篇帖子: How to create linked server on SQL-Cooper
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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