1.什么是触发器
- 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程
- 触发器通常用于强制业务规则
- 触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束 :可执行复杂的SQL语句(if/while/case)、可引用其它表中的列
- 触发器定义在特定的表上,与表相关。
- 自动触发执行
- 不能直接调用
- 是一个事务(可回滚)
2.创建触发器[DELETE, INSERT, UPDATE]
基本语法
CREATE TRIGGER trigger_name ON table_name [WITH ENCRYPTION] FOR [DELETE, INSERT, UPDATE] AS T-SQL语句 GO
3.实例
/*创建insert触发器,在上网记录表recordInfo上创建插入触发器*/ create trigger tr_insert_recordInfo /*tr_insert_recordInfo 触发器名称*/
on recordInfo
for insert --insert操作时 触发器自动执行 as /*定义变量,用于临时存储插入的会员号、电脑编号和卡的编号*/ declare @cardId char(10) declare @PCId int declare @CardNumber char(10)
--insert进recordInfo表的数据 会临时存储在 临时表inserted表里面
/*从inserted临时表中获取插入的记录行的信息,包括电脑的编号、卡的编号,放在上面定义的变量里面*/
select @PCId=PCId,@cardId=CardId from inserted
---向PCInfo表中插入一条记录信息,卡的编号、电脑编号和上机时间
--从inserted表获取cardId,PCId,beginTime 插进PCInfo表
insert PCInfo (cardId,PCId,beginTime) select cardId,PCId,beginTime from inserted
(或者 insert into PCInfo (cardId,PCId,beginTime) values(@cardId,1,getDate()))
----查看结果 select * from recordInfo select * from PCInfo
/*创建update触发器,在上网记录表recordInfo上创建更新触发器*/
create trigger tr_update_recordInfo on recordInfo for update as declare @beforePCId int declare @afterPCId int select @beforePCId =PCId from deleted select @afterPCId=PCID from inserted ---根据电脑编号修改使用状态----- ---根据以前使用的电脑编号把电脑的使用状态改为: update PCInfo set PCUse=0 where PCId=@beforePCId ---根据现在使用的电脑编号把电脑的使用状态改为: update PCInfo set PCUse=1 where PCId=@afterPCId ----显示电脑换机成功 print‘换机成功!从‘+convert(varchar(10),@beforePCId)+‘号电脑换到‘+convert(varchar(10),@afterPCId)+‘号电脑‘ go /*测试update触发器,修改电脑编号*/ --显示更改前,记录表中的数据 print‘更改前,记录表中的数据‘ select * from recordInfo --显示更改前,电脑表中的数据 print‘更改前,电脑表中的数据‘ select * from PCInfo set nocount on ---把电脑号为1的改为2 update recordInfo set PCId=2 where PCId=1 ---查看结果 print‘更改后,记录表中的数据‘ select * from recordInfo print‘更改后,电脑表中的数据‘ select * from PCInfo
--删除同步
/*创建delete触发器,在上网记录表recordInfo上创建删除触发器*/
create trigger tr_delete_recordInfo
on recordInfo
for delete
as
set xact_abort on
delete b
from recordInfo b,deleted i
where b.PCId= i.PCIdAND b.cardId=i.cardId
go
*如何删除触发器
drop trigger tr_delete_recordInfo
浙公网安备 33010602011771号