触发器解析

表结构如下

SELECT TOP 1000 [id]
      ,[cardID]
      ,[currentMoney]
  FROM [pubs].[dbo].[bank]

SELECT TOP 1000 [id]
      ,[transType]
      ,[transMoney]
      ,[cardID]
  FROM [pubs].[dbo].[bank_czmoney]

一、创建插入

CREATE trigger [dbo].[trig_bank_insert] on [dbo].[bank_czmoney]
    for insert
    as
    declare @type nvarchar(50),@xmoney money,@cardid nvarchar(50)     
    begin
        select @cardid=cardID,@type=transType,@xmoney=transMoney from inserted --取插入的数据
        IF(@type = '收入')
            update bank set currentMoney=(currentMoney + @xmoney) where cardID=@cardid  
        else
            update bank set currentMoney=(currentMoney - @xmoney) where cardID=@cardid  
            end            
GO

二、创建删除

CREATE TRIGGER trig_bank_delete
      ON bank_czmoney FOR DELETE  
      AS  
     declare @id int
     declare @transType nvarchar(50)
     declare @transMoney money
     declare @cardID nvarchar(50)
     select @id = id, @transType = transType,@transMoney=transMoney,@cardID=cardID from deleted --取删除的数据
          IF not exists (SELECT * FROM sysobjects where name = 'backupTable')
          select * into backupTable from bank_czmoney
          DELETE FROM backupTable
          insert into backupTable (id,transType,transMoney,cardID) VALUES (@id,@transType,@transMoney,@cardID)  --插入另一个表
            
三、创建修改

CREATE trigger trig_bank_update on bank_czmoney
    for update
    as
    declare @type nvarchar(50),@xmoney money,@cardid nvarchar(50)     
    begin         
        select @cardid=cardID,@type=transType,@xmoney=transMoney from bank_czmoney
        IF(@type = '收入')
            update bank set currentMoney=(currentMoney + @xmoney) where cardID=@cardid  
        else
            update bank set currentMoney=(currentMoney - @xmoney) where cardID=@cardid  
            end
            
backupTable 表内容(记录整张表的信息,对比前后发现删除了哪条记录):



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值