【机房重构】存储过程(组合查询+结账)

在开发机房收费系统个人重构版的过程中,我是根据功能来走的七层,这样就有一个弊端,一个功能就要走一遍七层,很是繁琐。而在很早之前我就听各位同学说到存储过程可以解决这一弊端,尤其是在组合查询和结账的时候,所以我打算在组合查询和结账功能的时候用一用存储过程,当然过程不是一帆风顺的,但是最后收获还是蛮大的。

什么是存储过程?

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它。

好了,那么我们应该如何写一个存储过程呢?需要经过以下几个步骤:

  1. 定义参数
  2. 写SQL语句

OK,步骤有了,下面我们来实战练习一遍。

组合查询

USE [机房重构]
GO
/****** Object:  StoredProcedure [dbo].[PROC_GroupCheck]    Script Date: 2018/12/13 10:57:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Mark
-- Create date: 2018-11-29 09:05:21
-- Description:	组合查询时候进行数据交互
-- =============================================
ALTER PROCEDURE [dbo].[PROC_GroupCheck]  
/****定义需要传递的参数****/
@cboField1 varchar(20),
@cboField2 varchar(20),
@cboField3 varchar(20),
@cboMark1 varchar(10),
@cboMark2 varchar(10),
@cboMark3 varchar(10),
@txtContent1 varchar(20),
@txtContent2 varchar(20),
@txtContent3 varchar(20),
@Relationship1 varchar(10),
@Relationship2 varchar(10),
@DbtableName varchar(20)
AS
	declare @TempSql varchar(500)
BEGIN
/****具体查询语句,@DbtableName,@cboField1,@cboMark1返回具体参数,char(39)是单引号,char(32)是空格****/
	SET @TempSql='SELECT * FROM '+@DbtableName+' WHERE '+@cboField1+@cboMark1+char(39)+@txtContent1+char(39)
	if(@Relationship1!='')
	BEGIN
		SET @TempSql=@TempSql+@Relationship1+CHAR(32)+@cboField2+@cboMark2+char(39)+@txtContent2+char(39)
		if(@Relationship2!='')
		BEGIN
		SET @TempSql=@TempSql+@Relationship2+CHAR(32)+@cboField3+@cboMark3+char(39)+@txtContent3+char(39)
		END
    END
ExECUTE(@TempSql)
END

结账

USE [机房重构]
GO
/****** Object:  StoredProcedure [dbo].[PROC_Account]    Script Date: 2018/12/13 10:52:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Mark
-- Create date: 2018-12
-- Description:	Accounts
-- =============================================
ALTER PROCEDURE [dbo].[PROC_Account]
			-- Add the parameters for the stored procedure here
	@Count int,
	@RechargeCash int,
	@CancelCash int,
	@ConsumeCash int,
	@AllCash int,
	@Date date,
	@UserID varchar(20),
	@CheckCash int
AS
	declare @IsCheck char(10)
BEGIN
	SET NOCOUNT ON;
	set @IsCheck='未结账'
	set @UserID=@UserID

	--购卡
	if @Count=1
	begin 
		select StudentNo,CardNo,LoginDate,LoginTime from Student_Info where Ischeck='未结账' and UserID=@UserID
	end 
	
	--充值情况:
	if @Count=2
	begin
		select CardNo,RechargeCash,Date,Time from Recharge_Info where IsCheck='未结账' and UserID=@UserID
	end 
	--退卡情况
	if @Count=3
	begin 
		select CardNo,CancelCash,Date,Time from CancelCard_Info where IsCheck='未结账'and UserID=@UserID
	end 

	--更新情况
	if @Count=4
	begin 
		update Student_Info set IsCheck='已结账' where Ischeck=@IsCheck and UserID=@UserID
		update Recharge_Info set IsCheck='已结账' where IsCheck=@IsCheck and UserID=@UserID
		update CancelCard_Info set IsCheck='已结账' where IsCheck=@IsCheck and UserID=@UserID
		insert into Check_Info values (@CancelCash,@RechargeCash,@CheckCash,@UserID,@Date)
	end 
	if @Count=5
	begin
		select IsCheck from Student_Info where UserID=@UserID and Ischeck='未结账'
	end 
END

存储过程写完之后就可以使用了,这样原本写好几个七层的工作量立马变为写一个七层就完成了,很方便。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值