SQLServer -- 事务的应用

在存储过程的应用

这里写图片描述

这里写图片描述

--use StudentManager
--go

----事务基本框架
--declare @errorSum int --定义变量,用于累计事务执行过程中的错误
--set @errorSum =0 --初始化为0,即无错误
--begin transaction
--  begin
--      update CardAccount set CurrentMoney=CurrentMoney-1000
--      where StudentId=100001
--      set @errorSum=@errorSum+@@ERROR

--      update CardAccount set CurrentMoney=CurrentMoney+1000
--      where StudentId = 100002
--      set @errorSum = @errorSum+@@ERROR
--      if(@errorSum>0)
--          rollback transaction
--      else
--          commit transaction  --提交回滚事务
--  end

--go

--select Students.StudentId,StudentName,CurrentMoney from Students
--inner join CardAccount on Students.StudentId=CardAccount.StudentId


--update CardAccount set CurrentMoney=CurrentMoney+900
--      where StudentId=100001
--select * from CardAccount


--事务的应用
use StudentManager
go

if exists(select * from sysobjects where name='usp_TransferAccounts')
drop procedure usp_TransferAccounts
go

create procedure usp_TransferAccounts
@inputAccount int,
@outputAccount int,
@transferMoney int
as
    declare @errorSum int 
    set @errorSum=0
    begin transaction
    begin
        Update CardAccount set CurrentMoney= CurrentMoney - @transferMoney 
        where StudentId=@outputAccount
        set @errorSum=@errorSum+@@ERROR
        update cardAccount set CurrentMoney=CurrentMoney + @transferMoney
        where StudentId =@inputAccount
        set @errorSum=@errorSum+@@ERROR
        if(@errorSum>0)
            rollback transaction
        else 
            commit transaction
    end

go
exec usp_TransferAccounts 100002,100001,100
select Students.StudentId,StudentName,CurrentMoney from Students
inner join CardAccount on Students.StudentId=cardAccount.StudentId


select * from CardAccount
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值