sql触发器的创建、以及列级触发器的创建

一.sql有时多张表具有联动关系,或者自己一张表要保持一定的更新。当对一张表,进行更新、删除、插入等操作时,会需要对另外一张表进行改动操作或者对本身要有其他操作。这时就需要创建sql触发器

二.创建步骤

   1.打开sqlserver,在右侧"对象资源管理器”找到需要操作的数据库,点开数据库找到需要创建’触发器‘的表,点击表名左侧的加号,会出现如下所示

     

右键点击’触发器‘,选择’新建触发器‘

如上图所示,1后面写上触发器名称,2写上所操作的表名,3,处写上当对表有“何种操作(insert,delete,update)时触发

begin  后开始写触发后执行何种操作。

触发器是利用了表数据发生变化时,自动生成的两个虚拟表,一个是inserted,一个是deleted,这两个虚拟表从其他地方是检索不到的,只有触发器能读到。

当数据发生变化时,如果是新插入数据,则该数据会在inserted里面暂时保存。而删除一条数据时,则会在deleted里面暂时保存。更新则等于先删除再插入,也就是deleted里面存更新前,inserted里面存更新后。这些数据会在触发器执行完成后消失。

这样我们需要的数据只要从inserted和deleted里面读取到就可以了。


下面看一个例子

USE [wbxdbx]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER  [dbo].[tgr_inspectstate_update]
   ON  [dbo].[inspectstate]
   AFTER  UPDATE
AS 

BEGIN
    SET NOCOUNT ON;
select @stateid=[inspestateid] from inserted  --新插入的数据

insert into [inspecthistory]  select * from delete;  --
     end
END

上述意思是在[inspectstate]表下面创建一个名为”[dbo].[tgr_inspectstate_update]“的触发器,只要一有数据更新,那么就会把  更新之前的一条数据插入到 【inspecthistory] 这张表里


但是有时我们需要监控,指定列的更新,只有当某一列更新 或者 只有当某一列更新为某一个数值时    我们才启动触发器
这是只要稍加改动,在BEGIN 之前加上限制条件  

USE [wbxdbx]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER  [dbo].[tgr_inspectstate_update]
   ON  [dbo].[inspectstate]
   AFTER  UPDATE
AS 

    declare @stateid int
     if(UPDATE([inspestateid])) --新加的判断条件,只有 [dbo].[inspectstate]的 inspestateid更新时才会启动触发器
BEGIN
    SET NOCOUNT ON;
select @stateid=[inspestateid] from inserted  --新插入的数据
    
if(@stateid in (3,4)) --进一步加了限制条件,只有当 [dbo].[inspectstate]的 inspestateid更新 为 ’3‘或者’4‘时,才会启动触发器操作
begin
 insert into [inspecthistory]  select * from delete;  --
          end
     end
END

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值