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

原文地址:https://www.cnblogs.com/jcomet/p/1320760.html