当前位置:Gxlcms > 数据库问题 > SQL Server 为代码减负之存储过程

SQL Server 为代码减负之存储过程

时间:2021-07-01 10:21:17 帮助过:82人阅读

sql增删改查的集合,假设程序中的一个功能涉及到对数据库的多次操作。那么就能够事先编译好存储过程。以提高程序执行效率!

    简单查询:

  1. CREATE PROCEDURE sp_query_online_info
  2. AS
  3. SELECT *FROM T_OnLine_info
  4. GO

    运行存储过程:

  1. EXEC sp_query_online_info

    带參数的存储过程:

  1. CREATE PROCEDURE insert_OnLine @cardno varchar(10), @ondate varchar(10),@ontime varchar(10),@AdminName varchar(10)
  2. AS INSERT INTO T_OnLine_info (cardNo,onDate,onTime,adminName)
  3. VALUES (@cardno,@ondate,@ontime,@AdminName )
  4. GO


    调用此存储过程:

  1. exec insert_OnLine '00001' ,'8/21/2014' ,'22:22:22', '刘颖

日结账单涉及多张表的查询,所以这里用存储过程再合适只是了

在这里说一下,机房收费系统的日结账单的逻辑。假设机房管理正规的话,会有一个固定的时间点,操作员(当天工作过的)来找管理员结账,将手里的钱交给管理员,并将操作员结账信息记录在数据库中,记录中包括当天此操作员经手的充值金额和退还金额,将全部操作员经手的充值金额和退还金额汇总后,就是今天日结账单中的充值金额和退还金额。日结账单中的消费金额从T_line_info 表中获取,本期剩余金额应该从T_students_info中获取,昨日卡中剩余金额应该日结账单的前一天的sumMoney列。所以日结账单的刷新也是要在有新的操作员结过账的情况下。日结账单中一天应该仅存有一条记录,管理员每天下班之前,必须验证日结账单里的账目与自己手里的账目一致才干下班。假设不一致,就说明有操作员还未结账,管理员就不能下班。

可见日结账单是涉及多张表的,在这里用存储过程在合适只是了


  1. CREATE PROCEDURE create_DStatement
  2. AS
  3. DECLARE @SDate VARCHAR(10)
  4. ---结账日期,也就是今天
  5. DECLARE @DATE AS VARCHAR(10)
  6. ----离今天近期的日期
  7. DECLARE @remainMoney numeric(18,0)
  8. ---昨日剩余金额
  9. DECLARE @RechargeMoney numeric(18,0)
  10. ---今日充值金额
  11. DECLARE @consumeMoney numeric(18,0)
  12. ---今日消费金额
  13. DECLARE @cancelMoney numeric(18,0) ---今日退卡金额
  14. DECLARE @sumMoney numeric(18,0)
  15. ---总金额
  16. SET @SDate =CONVERT(VARCHAR(10),GETDATE(),20) --给@SDate赋值
  17. DELETE FROM T_DStatement_info WHERE SDate=@SDate ----删除日结账单中今天的记录
  18. SET @DATE =(SELECT MAX(CONVERT(VARCHAR(10),SDATE) )FROM T_DStatement_info )----获取距离今天近期的一天日结记录
  19. SELECT @remainMoney =(SELECT sumMoney FROM T_DStatement_info WHERE SDate=@DATE )
  20. IF @remainMoney is NULL
  21. SET @remainMoney =0
  22. SELECT @RechargeMoney =(SELECT SUM(CONVERT(numeric(18, 0),rechargeMoney)) FROM T_Statement_info WHERE SDate=@SDate )
  23. IF @RechargeMoney Is nuLL
  24. SET @RechargeMoney =0
  25. SELECT @consumeMoney =(SELECT SUM(CONVERT(numeric(18, 0),consume)) FROM T_Line_info WHERE offDate =@SDate )
  26. IF @consumeMoney is NULL
  27. SET @consumeMoney =0
  28. SELECT @cancelMoney =(SELECT SUM(CONVERT(numeric(18, 0),cancelMoney))FROM T_Statement_info WHERE SDate =@SDate )
  29. IF @cancelMoney is NULL
  30. SET @cancelMoney =0
  31. SELECT @sumMoney =(SELECT SUM(CONVERT(numeric(18, 0),cash)) FROM T_Students_info )
  32. IF @sumMoney is NULL
  33. SET @sumMoney=0
  34. INSERT INTO T_DStatement_info (remainMoney,rechargeMoney,consumeMoney,cancelMoney ,sumMoney,SDate ) VALUES(@remainMoney,@RechargeMoney,@consumeMoney,@cancelMoney,@sumMoney,@SDate )

那么存储过程怎样在VB.net中调用呢?非常easy

技术分享

运用存储过程,使我的日结账单的生成,比第一次机房的时候。相对简单了非常多。



SQL Server 为代码减负之存储过程

标签:date()   article   card   天下   rom   main   功能   bsp   内存   

人气教程排行