触发器简单小结

来源:互联网 发布:广电网络和电信网络 编辑:程序博客网 时间:2024/04/29 12:46

首先介绍触发器的两个最重要的基础知识:

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 '出入库成功!';

原创粉丝点击