首先介绍触发器的两个最重要的基础知识:
1、 触发器分为两种:Instead of 和After 触发器。After触发器,顾名思义,就是在你SQL语句(Insert,Delete,Update)执行之后进行的操作。Instead of 则是在SQL语句之前,而且并不执行SQL语句。
2、 SQL Server为每一个触发器都准备了两个表:Inserted表和Deleted表,当执行Insert操作的时候,Inserted存入了要插入的数据,结构和要插入的数据表结构相同。Delete也是相同的。它们是在内存中,只能读取,不能修改,触发器结束,表也会删除。
一、 触发器基本语句
1、 创建触发器
create trigger trigger_name
on {table_name | view_name}
{for | After | Instead of }
[ insert, update,delete ]
as
sql_statement
2、 删除触发器:
drop trigger trigger_name
3、 查看数据库中已有触发器:
select * from sysobjects where xtype='TR'
4、 修改触发器:
alter trigger trigger_name
on {table_name | view_name}
{for | After | Instead of }
[ insert, update,delete ]
as
sql_statement
二、 可能大家感觉上面的语句大家在书上都能看到,对自己没有太大帮助还是不会写,给大家一个实例,大家就会豁然开朗,知道上面的语句都是什么意思。
下面这个实例作用是当我们向轮胎出入库记录表插入数据的时候,同时将轮胎的数据从仓库表中添加和删除。
create trigger TYRE_IN_OUT_INSERT
on TYRE_OUT_IN //轮胎出入库表
after insert
as
declare @TYRE_EPC varchar(50), @STORAGE varchar(50), @symbol varchar(50);
--在inserted表中查询已经插入记录信息
select @TYRE_EPC = TYRE_EPC, @STORAGE = STORAGE, @symbol = SYMBOL from inserted;
if ( @symbol='入库')
begin
insert into TYRE_STORAGE values(@TYRE_EPC, @STORAGE);
end
if(@symbol='出库')
begin
if(exists (select TYRE_EPC from TYRE_ STORAGE where TYRE_EPC=@TYRE_EPC))
begin
delete from TYRE_ STORAGE where TYRE_EPC=@TYRE_EPC;
end
end
print '出入库成功!';