触发器小解

             触发器简介:

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

 

   下面用一个简单的示例来了解它的语法和应用

 

            请写一个触发器,当录入身份证号码之后,自动计算出生日期,规则15位身份证是从第6位之后的6位,18位身份证是从第6位这后的8位。

 

第一步,我们先新建一个表。

代码
IFEXISTS (SELECT*FROM SYSOBJECTS WHERE NAME ='A01')
DROPTABLE A01

CREATETABLE A01
(
id
INTIDENTITY(1,1) PRIMARYKEYNOTNULL, --员工号--
pin VARCHAR(30) --身份证号--
)

 

第二步,我们为表A01 新建一个insert 触发器

 

代码
--判断是否存在同名触发器--

IFEXISTS (SELECT*FROM SYSOBJECTS WHERE NAME ='A01insert ')
DROPtrigger A01

--创建insert 触发器--

createtrigger A01insert
on A01
after
insert
as
declare@numvarchar(50)
selecttop(1) @num=pin from A01 orderby id desc

/*
这里这一步 有很多方法

例如:select @num=pin from A01 where id = (select max(id) from A01)

还有一种写法 select @num=pin from A01

虽然这里也可以得到同样的结果,我猜想 pin的值叠加覆盖前面一个值的,因为

selcet pin form A01查询出来的所有的值。

*/

if (len(@num)=15)

print'出生日期'+SUBSTRING(@num, 7, 6)

elseif(len(@num)=18)

print'出生日期'+SUBSTRING(@num, 7, 8)

go

 

 

第三步,插入数据测试

 

--18位身份证号--

insert into A01 values('310328198803740568')

执行结果:

出生日期19910311

(
1 行受影响)

 

 

 

 

 

 

--15位身份证号--

insert into A01 values('352622900123362')

执行结果:

出生日期90123
(
1 行受影响)

 

 

 


 

posted @ 2010-11-12 12:06  DOIT程序员  阅读(484)  评论(0)    收藏  举报