欢迎访问web记录!每一步的成长都是一种幸福,聪明的女孩擅长记录幸福!
您现在的位置:web记录 > 数据库 >

触发器的创建与应用

更新时间:2012-11-21 浏览次数:
触发器的创建与应用
实验目的:
1、掌握触发器的概念和分类
2、掌握DML触发器的创建与管理
3、掌握的DML触发器查看、删除和修改
4、了解DDL触发器的创建
实验内容:(以下存储过程在人事数据库下面创建)
1、在表gzqk1上创建一个AFTER类型的触发器,当向gzqk1表中添加记录时,如果该记录在zgda1表中不存在,则将该记录删除,否则提示信息“将一条新记录插入到表中!”。分别输入满足和不满足条件的记录将该触发器触发。
2、将上述的AFTER触发器修改为instead of触发器。
3、在gzqk1上创建一个插入、更新类型的after触发器,当在E_recsalary列插入或修改数据时触发该触发器,检查输入的数值是否在03000之间。分别插入数据和修改数据将该触发器触发。
4、创建一个删除触发器del_rensh,如果在gzqk1表中有职工的记录则不允许从zgda1表中删除记录。若没有则提示“删除一条记录!”。分别删除满足和不满足条件的记录来触发该触发器。
5、创建一个触发器del_gz,当删除zgda1表中记录时自动删除gaqk1表中对应职工号的记录。注意要有相应的提示信息。
6、在zgda1表上创建一个插入、更新类型的after触发器,当向该表插入或更新数据时,检查Dp_id列的值是否在表bm1中存在,若有允许插入或修改,否则不允许插入或修改。
7、使用SQL命令对已创建的存储过程进行查看。
8、使用删除命令DROP TRIGGER 将创建两个的触发器删除。
9、使用命令对创建的触发器del_gz 进行禁止和启用。


1.
use 人事数据库
go
create trigger q1 on gzqk for insert as
begin
declare @id char(10)
select @id=inserted.E_id from inserted
if exists(select * from zgda where E_id=@id)
print '将一条新的记录插入表中!'
else
begin
print '插入失败!'
delete from gzqk where E_id=@id
end
end
go
insert into gzqk values ('0003','紫儿',1000,200,200,50,50,1400,1300)
insert into gzqk values ('1000','乐乐',1000,200,200,50,50,1400,1300)
2.
use 人事数据库
go
if exists(select name from sysobjects where name='q1' and type='tr')
drop trigger q1
go
create trigger q1 on gzqk instead of insert as
begin
if exists(select * from zgda where E_id=(select E_id from inserted))
insert into gzqk select  E_id,E_name,E_base,E_add,E_allow,E_waterf,E_elef,E_allsalary,E_recsalary from inserted
end
go
insert into gzqk values ('0003','紫儿',1000,200,200,50,50,1400,1300)
insert into gzqk values ('1000','乐乐',1000,200,200,50,50,1400,1300)
3.
use 人事数据库
go
If exists(select name from sysobjects where  name='q2' and type='tr')
drop trigger q2
go
create trigger q2 on gzqk
after insert,update
as
if UPDATE(E_recsalary)
begin
print 'after触发器开始执行:'
declare @var money
select @var=E_recsalary from inserted
if @var>3000 or @var<0
begin
print'输入工资有误!'
rollback
end
end
insert into gzqk values ('0012','紫儿',1000,200,200,50,50,1400,1300)
update gzqk set E_recsalary=4000 where E_id='0002'
4.
use 人事数据库
go
If exists(select name from sysobjects where  name='del_rensh' and type='tr')
drop trigger del_rensh
go
create trigger del_rensh on zgda
after delete
as
begin
if  exists(select * from gzqk where gzqk.E_id=(select E_id from deleted))
rollback
else
print'删除一条记录!'
end
delete from zgda where e_id='0007'
delete from zgda where e_id='0002'
5.
use 人事数据库
go
If exists(select name from sysobjects where  name='del_gz' and type='tr')
drop trigger del_gz
go
create trigger del_gz on zgda
for delete
as
begin
declare @zgh char(10)
select @zgh=E_id from deleted
delete from gzqk where E_id=@zgh
print '成功删除gzqk表和zgda表中的对应记录!'
end
go
delete from zgda where E_id='0007'
6.
use 人事数据库
go
create trigger q6 on zgda after insert,update
as
if exists (select * from bm where Dp_id=(select Dp_id from deleted))
begin
print '系部不存在'
rollback
end
else
print '记录插入成功'
go
7.
sp_helptrigger gzqk
go
sp_helptrigger zgda
go
8.
drop trigger q1
go
9.
disable trigger de1_gz on zgda
alter table zgda disable trigger de1_gz
go
enable trigger de1_gz on zgda
alter table zgda enable trigger de1_gz
go



 
关键词:

    + 相关信息

    前端案例

    返回顶部 欢迎访问web记录!每一步的成长都是一种幸福,聪明的女孩擅长记录幸福!