T-SQL学习之路之数据库完整性之参规则

       规则(Rule)就是数据库中对存储在表的列或用户定义数据类型中的值的规定和限制,规则是单独存储的独立的数据库对象。

       规则和CHECK约束可以同时使用,表的列可以有一个规则及多个CHECK约束。规则与CHECK约束在功能上相似,使用 CHECK 约束是限制列值的首选标准方法,CHECK 约束比规则更简明,但CHECK约束不能直接作用于用户定义数据类型,它们在使用上是有所区别的。

       ● CHECK约束是在CREATE TABLE或ALTER TABLE语句中定义的,嵌入了被定义的表结构,在删除表的时候CHECK约束也就随之被删除。

    ● 规则需要用CREATE RULE语句定义后才能使用,是独立于表之外的数据库对象,删除表并不能删除规则,需要用DROP RULE语句才能删除

-------------------创建规则

    使用T-SQL语句中的CREATE RULE语句在当前数据库就中创建规则,其语法格式如下:

CREATE RULE [ schema_name . ] rule_name 
AS condition_expression
[ ; ]
     说明:
     ● rule_name:新规则的名称。
     ● condition_expression:定义规则的条件。规则可以是 WHERE 子句中任何有效的表达式,并且可以包括诸如算术运算符、关系运算符和谓词(如 IN、LIKE、BETWEEN等)。
     condition_expression 包括一个变量,每个变量的前面都有一个@符号,变量的名称应与规则关联的列或用户定义的数据类型具有相同的符号。

      例如:创建成绩表规则 grade_rule

USE stsc
GO
CREATE RULE grade_rule
AS @grade between 0 and 100
GO
      创建出生日期规则 stbirthday_rule

USE stsc
GO
CREATE RULE stbirthday_rule
AS @stbirthday>='1990-01-01' and @stbirthday<='1996-01-01'
GO

-------------------查看规则

    查看规则使用系统存储过程sp_helptext,其语法格式如下:

sp_helptext [ @objname = ] 'name' [ , [ @columnname = ] computed_column_name ]
    说明:

   [ @objname = ] 'name'子句指明对象名称。sp_helptext查看的对象可以是当前数据库的规则、默认值、触发器、未加密的存储过程等。

     例如,查看规则 grade_rule的文本信息

USE stsc
GO
EXECUTE sp_helptext grade_rule
GO

-------------------绑定规则

       使用系统存储过程 sp_bindrule 可以绑定一个规则到表的一个列或一个用户定义数据类型上,其语法格式如下:

sp_bindrule [ @rulename = ] 'rule' , 
 [ @objname = ] 'object_name' 
 [ , [ @futureonly = ] 'futureonly_flag' ]
      说明:

● [ @rulename =] 'rule:指定规则的名称。
● [ @objname = ] 'object_name':要绑定规则的表的列或用户定义数据类型。
● [ @futureonly = ] 'futureonly_flag':仅当将规则绑定到用户定义数据类型时才能使用。
   例如:将规则grade_rule绑定到score表上的grade列上:

USE stsc
GO
EXECUTE sp_bindrule grade_rule,'score.grade'
GO

-------------------解除规则

      解除规则使用系统存储过程sp_unbindrule,其语法格式如下:

sp_unbindrule [ @objname = ] 'object_name' 
 [ , [ @futureonly = ] 'futureonly_flag' ]
     说明:

     [ @objname = ] 'name'为要取消规则绑定的表和列或用户定义数据类型的名称。
     例如:解除绑定到score表的grade列上规则

USE stsc
GO
EXECUTE sp_unbindrule'score.grade'
GO

-------------------删除规则

     删除规则使用 DROP RULE语句,用于从当前数据库中删除一 个或多个规则,其语法格式如下:

DROP RULE { [ schema_name . ] rule_name } [ ,...n ] [ ; ]
     例如:删除规则stbirthday_rule, charater_rule。

USE stsc
GO
DROP RULE stbirthday_rule,character_rule
GO

-----------------更多信息,请参考sqlserver 联机丛书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值