📄 银行应用触发器的试验.txt
字号:
----解决银行取款问题:当向交易信息表(transInfo)中插入一条交易信息时,我们应自动更新对应帐户的余额。【使用INSERT触发器】
create tri_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 ----使用insert触发器时,inserted表是存放新增记录的
if (@type='支取')
update bank set currentMoney=currentMoney-@outMoney
where cardID=@myCardID
else
update bank set currentMoney=currentMoney+@outMoney
where cardID=@myCardID
go
----当删除交易信息表时,要求自动备份被删除的数据到表backupTable中。【使用DELETE触发器 】
create trigger tri_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
----跟踪用户的交易,交易金额超过20000元,则取消交易,并给出错误提示。【使用UPDATE触发器 】
create trigger trip_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-@beforeMoney)>2000
begin
print '交易金额:'+convert(varchar(8)),
abs(@afterMoney-@beforeMoney)
raiserror('每笔交易不能超过2万元,交易失败',16,1)
rollback transaction
end
go
----交易日期一般由系统自动产生,默认为当前日期。为了安全起见,一般禁止修改,以防舞弊。 【使用UPDATE触发器】
create trigger trig_update_transInfo
on transInfo
for update
as
if update(transDate)
begin
print '交易失败....'
raiserror('安全警告:交易日期不能修改,由系统自动产生',16,1)
rollback transaction
end
go
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -