存储过程转账

转账存储过程可参考以下代码逻辑:

USE [数据库名]
GO
/****** Object:  StoredProcedure [dbo].[SP_TransferMoney]    Script Date: 2018/9/25 8:25:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[SP_TransferMoney]
@userId INT,--操作人
@fromMemberCardId VARCHAR(64),--转账人的卡号
@toMemberCardId VARCHAR(64),--收款人的卡号
@transferMoney DECIMAL,--转账金额
@remark NVARCHAR(128),--备注
@errorMsg NVARCHAR(128) OUTPUT--错误消息
AS 

DECLARE @formId INT--转账人的主键Id
DECLARE @toId INT --收款人主键Id

--1.转账人的会员卡是否存在

IF ( SELECT COUNT(*) FROM dbo.MemCards WHERE MC_CardID=@fromMemberCardId)<=0-- 如果结果小于0说明转账人会员卡不存在
BEGIN
	SET @errorMsg='转账人的会员卡不存在';
	RETURN;
END

SELECT @formId=MC_ID FROM dbo.MemCards WHERE MC_CardID=@fromMemberCardId --对转账人的主键Id赋值


--2.收款人的会员卡是否存在
IF ( SELECT COUNT(*) FROM dbo.MemCards WHERE MC_CardID=@toMemberCardId)<=0-- 如果结果小于0说明收款人会员卡不存在
BEGIN
	SET @errorMsg='收款人的会员卡不存在';
	RETURN;
END

SELECT @toId=MC_ID FROM dbo.MemCards WHERE MC_CardID=@toMemberCardId --对收款人的主键Id赋值

--3.转账的金额是否小于余额

IF ( SELECT MC_Money FROM dbo.MemCards WHERE MC_CardID=@fromMemberCardId)<@transferMoney --如果余额小于转账金额,提示余额不足
BEGIN
	SET @errorMsg='转账人的余额不足';
	RETURN;
END 

BEGIN TRANSACTION --开启事务
BEGIN TRY
UPDATE dbo.MemCards SET MC_Money=MC_Money-@transferMoney WHERE MC_ID=@formId;--给转账人扣钱

UPDATE dbo.MemCards SET MC_Money=MC_Money+@transferMoney WHERE MC_ID=@toId;--给收款人加钱

--写入转账日志
INSERT INTO dbo.TransferLogs
        ( S_ID ,
          U_ID ,
          TL_FromMC_ID ,
          TL_FromMC_CardID ,
          TL_ToMC_ID ,
          TL_ToMC_CardID ,
          TL_TransferMoney ,
          TL_Remark ,
          TL_CreateTime
        )
VALUES  ( 2 , -- S_ID - int
          @userId , -- U_ID - int
          @formId , -- TL_FromMC_ID - int
          @fromMemberCardId, -- TL_FromMC_CardID - nvarchar(50)
          @toId , -- TL_ToMC_ID - int
          @toMemberCardId , -- TL_ToMC_CardID - nvarchar(50)
          @transferMoney , -- TL_TransferMoney - money
          @remark , -- TL_Remark - varchar(200)
          GETDATE()  -- TL_CreateTime - datetime
        )

COMMIT TRANSACTION --提交事务
END TRY
BEGIN CATCH
	RAISERROR('处理异常',16,1)
	ROLLBACK TRANSACTION--回滚事务
END CATCH
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值