公司里的每个项目都有很多一次要操作两次以上数据库的,为了数据的完整性,这就需要使用事务
事务也属于存储过程,代码如下
ALTER proc [dbo].[js_takemoney]
@userid bigint, --参数
@usercode varchar(50),
@amount numeric(18,2),
@rmb numeric(18,2)
as
begin
declare @balance numeric(18,2)
declare @takecharg numeric(18,2)
declare @takechargmoney numeric(18,2)
declare @turetype numeric(18,2)
declare @getamount numeric(18,2) --实际金额
declare @waterid int --流水账表的ID
select @takecharg =TakeMoneyChargRate ,@turetype = UStoRMB from tb_GlobeParam where id = '1'
set @takechargmoney = @amount * @takecharg/100
set @getamount =@amount - (@amount * @takecharg/100) --手续费的计算
begin tran takemoney --开始事务
update tb_user set BonusAccount = BonusAccount - @amount where userid = @userid --更新用户表
select @balance = BonusAccount from tb_user where userid = @userid
insert into tb_AccountDetails values (@userid,@usercode,'1','提现','0',@amount,@balance,getdate()) --流水账表记录插入
select top 1 @waterid = @@IDENTITY from tb_AccountDetails where userid = @userid
insert into tb_TakeMoney values (getdate(),@amount,@getamount,@rmb,@takechargmoney,@userid,'0',@waterid,getdate()) --提现表记录插入
if @@error<>0 --如果失败
begin
rollback tran takemoney -- 回滚事务
return
end
commit tran mytran --提交事务
end
这写法是网上一位不知名的网友提供的,我忘了……这个例子是我项目里的例子
希望对初学者有所帮助