转账事务与存储过程
一、实验目的:
1.掌握事务操作
2.掌握存储过程的应用
二、实验内容:
1、先建立数据环境(帐户表)
create table 帐户表
(帐户编号 char(4) primary key,
帐户名 char(4),
金额 int)
go
insert 帐户表 values('A','A',19800);
insert 帐户表 values('B','B',5000);
insert 帐户表 values('C','C',2000);
insert 帐户表 values('D','D',9000);
go
2、转账事务与存储过程的编写
if exists(select name from sysobjects
where name = 'zhuanzhang' and type='p')
drop procedure zhuanzhang
go
--建立一个带有参数的转账存储过程
-- @zhOUT 转出帐户帐号
-- @zhIN 转入帐户帐号
--@JinE 金额
create procedure zhuanzhang
@zhOUT varchar(8),@zhIN varchar(8),@JinE int
as
--转账事务
begin transaction
--记录点
save transaction befor_zhuanzhang
--帐户转出 一定金额
declare @xianYou int
select @xianyou=金额 from 帐户表
where 帐户编号=@zhOUT
if @xianyou<@JinE
begin
rollback transaction befor_zhuanzhang
print '金额不足!'
--return
end
else
begin
update 帐户表 set 金额=金额-@JinE
where 帐户编号=@zhOUT
--帐户转入 一定金额
update 帐户表 set 金额=金额+@JinE
where 帐户编号=@zhIN
if @@Error<>0 or @@rowcount=0
begin
rollback transaction befor_zhuanzhang
print '转账出错错误。'
--return
end
else
begin
print '帐户'+@zhOUT+'转出'+convert(varchar(32),@JinE)+'元,到帐户'+@zhIN+'。'
end;
end
commit transaction
3.测试数据(执行存储过程zhuanzhang)
execute zhuanzhang 'A','B',5000
execute zhuanzhang 'C','D',5000
写出以上语句依次执行的实验结果。