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