- 执行insert语句,使用inserted表
- 执行delete语句,使用deleted表
- 执行update语句,旧数据放到deleted表,新数据放到inserted表
触发器:自动化,减少手动到来误操作
触发器没有执行完毕,就会一直占用表,其他链接不能使用该表
output.inserted.列名
1、DML触发器:insert delete update(不支持select)
after触发器(for) instead of 触发器(不支持before触发器)
2、DDL触发
create trigger tbl_TblClass_insert_after
on TblClass after insert
as
begin
declare @id int,
declare @name varchar(50),
declare @desc varchar(50)
select @id=tClassId ,@name=tclassName,@desc=ClassDesc from inserted
print @id
print @name
print @desc
end
--测试
insert into TblClass values('班级名称','班级描述')
将删除的数据备份到另一个表中
create trigger tri_TblClass_delete_after
on TblClass after delete[,insert]
as
begin
insert into TblClass_Bak select * from deleted
end
sql触发器是表级触发器,无论删除多少行或者插入多少行数据,只触发一次
是按照语句触发的,每次执行一次语句,触发一次触发器
不会每条语句都触发
代理实现备份:
建立作业
create trriger tri_TblClass_delete_instead_of
on TblClass instead of delete
as
begin
insert into TblClassBak select * from deleted
end
--使用 instead of 触发器后,原来删除操作被 insert into TblClassBak
尽量避免在触发器中执行耗时操作,因为触发器会与Sql语句认为在同一个事务。事务不结束就无法释放锁
避免在触发器中较复杂的操作,影响触发器性能,要想编写高效触发器考虑的因素较多
触发器编写时注意对多行触发时的处理 (一般不建议使用游标,性能问题)