SQL Server 為代碼減負之預存程序,sql減負

來源:互聯網
上載者:User

SQL Server 為代碼減負之預存程序,sql減負

    預存程序可以用來提高資料庫的查詢效率,因為它事先被編譯過,被儲存於記憶體中,每次執行前,不必被從新編譯,所以效率很高。預存程序是一組sql增刪改查的集合,如果程式中的一個功能涉及到對資料庫的多次操作,那麼就可以事先編譯好預存程序,以提高程式運行效率!

    簡單查詢:

CREATE PROCEDURE sp_query_online_infoAS 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_DStatementAS 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 =0SELECT @RechargeMoney =(SELECT SUM(CONVERT(numeric(18, 0),rechargeMoney)) FROM T_Statement_info WHERE SDate=@SDate )IF @RechargeMoney  Is nuLL  SET @RechargeMoney =0SELECT @consumeMoney =(SELECT SUM(CONVERT(numeric(18, 0),consume)) FROM T_Line_info WHERE offDate =@SDate )IF @consumeMoney is NULL SET @consumeMoney =0SELECT @cancelMoney =(SELECT SUM(CONVERT(numeric(18, 0),cancelMoney))FROM T_Statement_info WHERE SDate =@SDate )IF @cancelMoney is NULL SET @cancelMoney =0SELECT @sumMoney =(SELECT SUM(CONVERT(numeric(18, 0),cash)) FROM T_Students_info )IF @sumMoney  is NULL SET @sumMoney=0INSERT INTO T_DStatement_info (remainMoney,rechargeMoney,consumeMoney,cancelMoney ,sumMoney,SDate ) VALUES(@remainMoney,@RechargeMoney,@consumeMoney,@cancelMoney,@sumMoney,@SDate )

那麼預存程序如何在VB.net中調用呢?很簡單

運用預存程序,使我的日結賬單的產生,比第一次機房的時候,相對簡單了很多。




怎(用代碼)讀取sql server中指定預存程序的代碼內容?

sp_helptext 預存程序名
 
SQL server 2000 中的預存程序這個代碼是什?if exists(select name from sysobjects

在整個資料庫裡面尋找 名字是'student_info' ,類型是P(其中P表示procedure ,預存程序)的 預存程序,如果找到就刪除它

if exists(select name from sysobjects where name='student_info' and type='P')
---這行就是尋找名字是 'student_info',類型為 P 的預存程序;
drop procedure student_info --如果找到就刪除
go

如果沒看錯的話,接下來應該就是 建立一個名為'student_info'的預存程序
使用上面的代碼可以防止 預存程序 重名,減少錯誤:
接下來應該是:
create procedure student_info
as select語句……
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.