开始想着机房怎么也得来个存储过程吧,后来就打听了打听,组合查询的比较多,可我是谁啊,工地一枝花啊,说啥也得自己来个不一样的,当时写完,表面没啥错,也执行成功了,找谁都跟谁说我是个天才,可到了运行的时候可难死我喽,想法总是很丰富的,也写出来了,就是不对。
总的说起来,有三个过程吧 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前进的步伐还在加快,多用一些自己不擅长的东西去寻找新鲜感吧。