规则和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 [ ; ]说明:
例如:创建成绩表规则 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 [ @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 { [ schema_name . ] rule_name } [ ,...n ] [ ; ]例如:删除规则stbirthday_rule, charater_rule。
USE stsc GO DROP RULE stbirthday_rule,character_rule GO