触发器
一、定义:
触发器是一种特殊的存储过程,一般的存储过程只要被主动调用时才会实现,而触发器则是用户对表的修改时就会自自动触发。 触发器直接定义在表上,当没有实现相应的功能时会自动回滚到以前的状态。触发器经常用于对于表的删除与更新,例如对于一个表的删除某一个数据,但这个数据会在其他的表格做为外码,如果不创建触发器进行连级删除,那么就会产生约束的冲突。
二、语法
触发器分为两种类型,一种是after,另一种是Instead of .
after作为动作实现之后,进行的操作。
Instead of 为在删除或者更新等操作之前,先进行的操作(一般所要删除的数据作为外键是,使用instead of)
创建触发器:
create trigger tgr_name
on table_name
with encrypion –加密触发器
for update...
as
Transact-SQL
修改触发器:
create trigger tgr_name
on table_name
{after|instead of} {insert|delete|update}
as
SQL语句
删除触发器:
drop trigger +触发器名
在使用触发器时,会使用两个特殊的虚拟表-----deleted 和inserted 。这两个有以下的特性:
① 表的结构与所绑定的表结构一样,存储的所要处理的数据。
② 在事务处理完成是,deleted和inserted这两个表也将会被删除。
③ deleted存储的是将要delete或者update 的数据。
④inserted存储的是将要insert或者update 的数据
三、用法
一、表的关联删除
create trigger Employee_trigger1
on Employees
instead of delete
as
begin
delete from EmployeeTerritories where EmployeeID=(select EmployeeID from deleted )
print '删除成功'
end
调用:
delete from Employees where EmployeeID=2
修改触发器:
alter trigger Employee_trigger1
on Employees
for update
as
begin
print '更新完成'
end
删除触发器:
drop trigger Employee_trigger1
二、表的插入之前的主键判断
create trigger Employees_tigger
on Employees
instead of insert
as
begin
if exists (select * from inserted where EmployeeID in(select EmployeeID from Employees ))
begin
print '存在ID,请重新输入'
rollback
end
else
print '插入成功'
end
删除触发器:
drop trigger Employees_tigger