C# 存储过程-机房充值

来源:互联网 发布:mysql左外连接查询 编辑:程序博客网 时间:2024/05/16 02:29

前言

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

正文

  总的说起来,有三个过程吧
  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 ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- 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)ASBEGIN    -- 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 hereEND

小结

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