zoukankan      html  css  js  c++  java
  • SQL Server 为代码减负之存储过程

        存储过程能够用来提高数据库的查询效率。由于它事先被编译过。被储存于内存中,每次执行前。不必被从新编译,所以效率非常高。

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

        简单查询:

    CREATE PROCEDURE sp_query_online_info
    AS 
    SELECT *FROM T_OnLine_info 
    GO

        运行存储过程:

    EXEC sp_query_online_info 

        带參数的存储过程:

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


        调用此存储过程:

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

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

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

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


    CREATE PROCEDURE create_DStatement
    AS 
    
    DECLARE @SDate VARCHAR(10)					---结账日期,也就是今天
    DECLARE @DATE AS VARCHAR(10)				----离今天近期的日期
    DECLARE @remainMoney numeric(18,0)			---昨日剩余金额
    DECLARE @RechargeMoney numeric(18,0)		---今日充值金额
    DECLARE @consumeMoney numeric(18,0)			---今日消费金额
    DECLARE @cancelMoney  numeric(18,0)         ---今日退卡金额
    DECLARE @sumMoney numeric(18,0)				---总金额
    
    
    SET @SDate =CONVERT(VARCHAR(10),GETDATE(),20) --给@SDate赋值
    
    DELETE FROM T_DStatement_info WHERE SDate=@SDate ----删除日结账单中今天的记录
    
    SET @DATE =(SELECT MAX(CONVERT(VARCHAR(10),SDATE) )FROM T_DStatement_info )----获取距离今天近期的一天日结记录
    
    SELECT @remainMoney =(SELECT sumMoney  FROM T_DStatement_info WHERE SDate=@DATE )
    IF @remainMoney  is NULL 
    SET @remainMoney =0
    
    SELECT @RechargeMoney =(SELECT SUM(CONVERT(numeric(18, 0),rechargeMoney)) FROM T_Statement_info WHERE SDate=@SDate )
    IF @RechargeMoney  Is nuLL  
    SET @RechargeMoney =0
    
    SELECT @consumeMoney =(SELECT SUM(CONVERT(numeric(18, 0),consume)) FROM T_Line_info WHERE offDate =@SDate )
    IF @consumeMoney is NULL 
    SET @consumeMoney =0
    
    SELECT @cancelMoney =(SELECT SUM(CONVERT(numeric(18, 0),cancelMoney))FROM T_Statement_info WHERE SDate =@SDate )
    IF @cancelMoney is NULL 
    SET @cancelMoney =0
    
    SELECT @sumMoney =(SELECT SUM(CONVERT(numeric(18, 0),cash)) FROM T_Students_info )
    IF @sumMoney  is NULL 
    SET @sumMoney=0
    
    INSERT INTO T_DStatement_info (remainMoney,rechargeMoney,consumeMoney,cancelMoney ,sumMoney,SDate ) VALUES(@remainMoney,@RechargeMoney,@consumeMoney,@cancelMoney,@sumMoney,@SDate )
    

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

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



  • 相关阅读:
    (简单) POJ 3074 Sudoku, DLX+精确覆盖。
    (中等) POJ 1084 Square Destroyer , DLX+可重复覆盖。
    (简单) FZU 1686 神龙的难题 , DLX+可重复覆盖。
    动态规划(分割整数)---按平方数来分割整数
    动态规划(分割整数)---分割整数的最大乘积
    动态规划(数组区间)---数组中等差递增子区间的个数
    动态规划(数组区间)---数组区间和
    动态规划(矩阵路径)---矩阵的总路径数
    动态规划(矩阵路径)---矩阵的最小路径和
    动态规划(斐波那契系列)---母牛生产
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7047137.html
Copyright © 2011-2022 走看看