1. 程式人生 > >SQL Server 為代碼減負之存儲過程

SQL Server 為代碼減負之存儲過程

每次 data- online int money -a stat lib -s

存儲過程能夠用來提高數據庫的查詢效率。由於它事先被編譯過。被儲存於內存中,每次執行前。不必被從新編譯,所以效率非常高。

存儲過程是一組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) [email protected]
/* */ DELETE FROM T_DStatement_info WHERE [email protected] ----刪除日結賬單中今天的記錄 SET @DATE =(SELECT MAX(CONVERT(VARCHAR(10),SDATE) )FROM T_DStatement_info )----獲取距離今天近期的一天日結記錄 SELECT @remainMoney =(SELECT sumMoney FROM T_DStatement_info WHERE [email protected] ) IF @remainMoney is NULL SET @remainMoney =0 SELECT @RechargeMoney =(SELECT SUM(CONVERT(numeric(18, 0),rechargeMoney)) FROM T_Statement_info WHERE [email protected] ) IF @RechargeMoney Is nuLL SET @RechargeMoney =0 SELECT @consumeMoney =(SELECT SUM(CONVERT(numeric(18, 0),consume)) FROM T_Line_info WHERE offDate [email protected] ) IF @consumeMoney is NULL SET @consumeMoney =0 SELECT @cancelMoney =(SELECT SUM(CONVERT(numeric(18, 0),cancelMoney))FROM T_Statement_info WHERE SDate [email protected] ) 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

技術分享

運用存儲過程,使我的日結賬單的生成,比第一次機房的時候。相對簡單了非常多。



SQL Server 為代碼減負之存儲過程