触发器小解
触发器简介:
触发器(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) --身份证号--
)
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
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 行受影响)
insert into A01 values('310328198803740568')
执行结果:
出生日期19910311
(1 行受影响)
--15位身份证号--
insert into A01 values('352622900123362')
执行结果:
出生日期90123
(1 行受影响)
insert into A01 values('352622900123362')
执行结果:
出生日期90123
(1 行受影响)


浙公网安备 33010602011771号