在开发机房收费系统我的重构版的过程当中,我是根据功能来走的七层,这样就有一个弊端,一个功能就要走一遍七层,非常繁琐。而在很早以前我就听各位同窗说到存储过程能够解决这一弊端,尤为是在组合查询和结帐的时候,因此我打算在组合查询和结帐功能的时候用一用存储过程,固然过程不是一路顺风的,可是最后收获仍是蛮大的。web
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,存储在数据库中,通过第一次编译后调用不须要再次编译,用户经过指定存储过程的名字并给出参数来执行它。数据库
好了,那么咱们应该如何写一个存储过程呢?须要通过如下几个步骤:svg
OK,步骤有了,下面咱们来实战练习一遍。code
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
存储过程写完以后就可使用了,这样本来写好几个七层的工做量立马变为写一个七层就完成了,很方便。xml