• sql 触发器


    创建insert触发器

    use studb
    go
    if exists(select name from sysobjects where name='trig_transinfo')
    drop trigger trig_transinfo
    go
    create trigger trig_transinfo
    on  transinfo
    for insert
    as
    declare @ type char(4),@outmoney money
    declare @mycardid char(10),@balance money
    select @type=transtype,@outmoney=transmoney,@mycardid=cardid from inserted
    if(@type='支取')
    update bank set currentmoney=currentmoney-@outmoney where cardid=@mycardid
    else
     update bank set currentmoney=currentmoney+@outmoney where cardid=@mycardid

    print '交易成功!交易金额',+convert(varchar(20),@outmoney)
    select @balance=currentmoney from bank where cardid=@mycardid
    print '卡号 '+ @mycardid +'金额' + convert(varchar(20),balance)
    go
    set nocount on
    insert into transinfo(cardid,transtype,transmoney) values('1001 0001','支取',200)
    insert into transinfo(cardid,transtype,transmoney) values('1001 0002','存入',50000)
    select * from bank
    select * from transinfo

    创建delete触发器

    use studb
    go
    if exists(select name from sysobjects where name='trig_delete_transinfo')
    drop ttrigger trig_delete_transinfo
    go
    create trigger trig_delete_transinfo
    on transinfo
    for delete
    as
    print '开始备份数据,请稍候.....'
    if not exists(select * from sysobjects where name='backuptable')
    select * into backuptable from deleted
    else
    insert into backuptable select * from deleted
    print '备份数据成功,备份表中的数据为:'
    select * from backuptable
    go

    set nocount on
    delete transinfo
    print '交易信息表中的数据'
    select * from transinfo

    创建update触发器
    use studb
    go
    if exists(select  name from sysobjects where name='trig_update_bank')
    drop trigger trig_update_bank
    go
    create trigger trig_update_bank
    on bank
    for update
    as
    declare @beforemoney money,@aftermoney money
    select @beforemoney=currentmoney from deleted
    select @aftermoney=currentmoney from inserted
    if abs(@aftermoney-beforemoey)>20000
    begin
    print '交易金额' + convert(varchar(8),abs(@aftermoney-@beforemoney))
    raiserror('没笔交易不能超过2万元,交易失败',16,1)
    roolback transaction
    end

    go
    set nocount on
    update bank set currentmoney=currenymoney+25000 where cardid='1000 0001'
    go
    insert  into transinfo(cardid,transtype,transmoney) values('1000 0002','支取',30000)
    insert into  transinfo(cardid,transtype,transmoney) values('1000 0002','存入',5000)
    go
    print '帐户信息表中的数据'
    select * from bank
    print '交易信息表中的数据'
    select * from transinfo

  • 相关阅读:
    LeetCode【125. 验证回文串】
    LeetCode【122. 买卖股票的最佳时机 II】
    LeetCode【121. 买卖股票的最佳时机】
    LeetCode【119. 杨辉三角 II】
    LeetCode【118. 杨辉三角】
    LeetCode【112. 路径总和】
    PAT1024
    PAT1020
    PAT1018
    PAT1017
  • 原文地址:https://www.cnblogs.com/benzhang/p/1458786.html
Copyright © 2020-2023  润新知