规则是一个向后兼容的功能,用于执行一些与 CHECK 约束相同的功能。CHECK 约束是用来限制列值的首选标准方法。CHECK 约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个 CHECK 约束。CHECK 约束作为 CREATE TABLE 语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。也可以把规则绑定到用户自定义数据类型上。
创建规则并把规则绑定到表的某一列上
if exists(select name from sysobjects
where name='rule1'and type='r')
drop rule rule1
go
create rule rule1
as
@v>150 and @v<200
--使用规则,绑定到表的列上
sp_bindrule rule1 ,'stu.b_id'
--插入一条记录
select * from stu
insert into stu values (1141,'sad',169,169)
--更新记录
update stu
set b_id=13
--解除对表的绑定
sp_unbindrule 'stu.b_id'
注意:把规则绑定到表的某列上时,只是从创建规则起开始执行该规则,进行对该表的这个字段进行规则约束。对于表里以前存在的数据而言不进行规则的约束!
创建规则把规则绑定到用户自定义数据类型上
--使用规则,绑定到用户自定义数据类型上
--首先定义一个数据类型
exec sp_addtype mail ,'varchar(60)','not null'
--创建一个规则
if exists(select name from sysobjects
where name='rule2'and type='r')
drop rule rule2
go
create rule rule2
as
@value like '%_@_%.__%'
--绑定规则到用户自定义数据类型上
sp_bindrule rule2,'mail'
--创建一张表
create table message
(
m_id int identity(1,1) primary key,
m_name char(16) not null,
m_mail mail
)
--给表插入一条数据
insert into message values('aa','goudan513@sohu.com')
--查看刚写的信息
select * from message
--如果插入不符合规则的数据,则插入失败
insert into message values('aa','goudan513sohu.com')