C# 存储过程-机房充值

前言

  开始想着机房怎么也得来个存储过程吧,后来就打听了打听,组合查询的比较多,可我是谁啊,工地一枝花啊,说啥也得自己来个不一样的,当时写完,表面没啥错,也执行成功了,找谁都跟谁说我是个天才,可到了运行的时候可难死我喽,想法总是很丰富的,也写出来了,就是不对。

正文

  总的说起来,有三个过程吧
  1.sql 语句写出来了,代码也能显示充值成功,但是充多少就是多少,笨蛋的只会更新不会加,于是就有了以下的sql语句

这里写图片描述

  后果:之前的数据会丢失,钱也会丢失

  2.知道了要把之前剩余的钱和现在充值的钱相加,结果只会子加,因为我两个表里字段名都是cash,最后加的时候只会充值+充值

这里写图片描述

  后果:变成了黑心厂家,虽然是可以相加,但是之前的数据还是会丢失,But只要你充的多,那么你卡里的钱就会加倍,哈哈哈

  3.在经过各种查找,更改,测试,终于在不经意中发现了其中的奥秘,也发现了存储过程的厉害之处,其实也挺好玩的

这里写图片描述

  好啦,这样可要找不同了,惊喜总在细微处,其实啊,调表的过程中想法是对的,但是语句还是有一点点差错的。

这里写图片描述
这里写图片描述

  一个是调表里的数据,一个是从D层返回的数据,这样就可以相加啦。

  好啦,整体的代码就是这样的:

USE [JFCharge]
GO
/****** Object:  StoredProcedure [dbo].[Proc_Recharge]    Script Date: 2017/8/5 16:13:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <井朝>
-- Create date: <2017-7-13>
-- Description: <向card和充值表里添加数据>
-- =============================================
ALTER PROCEDURE  [dbo].[Proc_Recharge]
    -- Add the parameters for the stored procedure here
    @cardID varchar(11),
    @cash decimal(18, 1)



AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements. 
DECLARE 
     @Money decimal(18, 1),
     @SumMoney decimal(18, 1),
     @lastcash decimal(18, 1)

    BEGIN TRANSACTION


    --插入充值记录到充值表  
    INSERT INTO [dbo].[CardRecharge] (cardID,cash)  
        VALUES(@cardID,@cash)  


    ---从卡表获取原始金额赋值给money  
      SELECT @Money=@Cash FROM [dbo].[Card] WHERE cardID =@cardID 

    ---从充值卡表获取充值金额赋值给lastcash  
      SELECT  @lastcash=@cash  from [dbo].[CardRecharge] WHERE cardID =@cardID

    --计算出要返回的总金额 SumMoney 等于原始金额money加上 lastcash  
      SET @SumMoney = @Money+@lastcash

    --更新卡表的金额,将summoney赋值给两张表的cash
    update  [dbo].[Card] set cash=@SumMoney where cardID =@cardID

    if @@ERROR <>0  
        rollback  --回滚  
    else  
        commit    --执行 





    -- Insert statements for procedure here


END

小结

  前进的步伐还在加快,多用一些自己不擅长的东西去寻找新鲜感吧。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值