SqlServer触发器的格式+小例子解析

触发器基本语法格式:

create trigger tri_name        
on table                                
for insert/update/deleted    
as

SQL code

触发器基本语法解析:

create trigger tri_name        //(tri_name:自定义触发器的名称)
on table                                //(table:触发器的表名)
for insert/update/deleted    //(触发器类型:insert插入数据触发,update更新数据触发,deleted删除数据触发)

as

declare @kssj datetime         //(定义一个变量,做中间处理)
declare @sqbh char(40)

select @kssj = kssj,@sqbh = sqbh from inserted

                                                //插入数据时,插入的数据在表inserted

                                                //更新数据时,更新后的数据在表inserted,更新前的数据在表中deleted

                                                //删除数据时,删除的数据在表deleted

                                                //不同的操作可以取出不同的中间数据做处理,案例中是取出插入的数据

update table2 set isks = 1,kksj = @kssj where sqbh = @sqbh

                                                //根据中间处理做相应操作,案例的处理为“将插入的值同步更新到另一个表

触发器的限制:(触发器是一种特殊的储存过程)

一个表最多只能有三个触发器,insert,update,delete

●每个触发器只能用于一个表

●不能对视图、临时表创建触发器

●Truncate table能删除表,但不能触发触发器

●不能将触发器用于系统表

合理地使用触发器对性能的影响是正面的。在设计和使用触发器时,经常地用sp_depends命令了解对象所关联的触发器是有好处的,该命令能列出触发器影响的所有对象、表和视等。

在定义几类数据库对象的时候,对存储过程、索引和触发器要给予特别的注意,尤其存储过程,它设计的好坏对数据库性能的影响很大。

说明:Sybase触发器使用的两个测试表:Deleted表和Inserted表,它们都是临时表,其结构与触发器的基表结构相同,用来存放与修改相关的数据行。

常见的触发器有三种:分别应用于Insert,Update,Delete事件。

使用触发器的优点:

触发器是自动的,它们在对表的数据作了任何修改之后立即被激活。

触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。

触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。


小例子:

USE [SmartMeter]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER  TRIGGER [dbo].[trg_FreezeDay_Insert]
   ON  [dbo].[FreezeDay]
   FOR Insert  
AS 
BEGIN
  
   DECLARE  @meterid varchar(40),@currdate datetime,@Currqty numeric(18,2),@currcbrq datetime
   
   SELECT @meterid=meterid,@currdate=freezedate,@Currqty=FreezeNumber,@currcbrq=ReadDate
   FROM inserted 
 
   begin
     delete from [gsdata].[dbo].[ChaoBiaoInfo] where YHBH=@meterid and CBRQ=@currcbrq and BYCBS=@Currqty and cbny=@currdate
     insert into [gsdata].[dbo].[ChaoBiaoInfo]([YHBH], [CBRQ], [BYCBS], [cbny])
     values(@meterid,@currdate,@Currqty,REPLACE( left(@currdate,7),'-',''))
  end

END
GO
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值