【機房重構】——儲存過程和觸發器
阿新 • • 發佈:2019-01-11
引言
在上一篇部落格中給大家介紹了觸發器的作用,那麼我在這篇部落格中給大家介紹一下儲存過程的知識,觸發器和儲存過程非常的相似,所以給大家介紹完儲存過程以後會通過對比這兩塊知識給大家總結一下。基本知識
儲存過程(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的一個重要物件,任何一個設計良好的資料庫應用程式都應該用到儲存過程。大概分為三類:系統、本地、臨時、遠端、擴充套件儲存過程幾類。作用
1、儲存過程因為SQL語句已經預編繹過了,因此執行的速度比較快。 2、儲存過程可以從自己的儲存過程內引用其它儲存過程,這可以簡化一系列複雜語句。 3、儲存過程主要是在伺服器上執行,減少對客戶機的壓力。 4、儲存過程可以接受引數、輸出引數、返回單個或多個結果集以及返回值。可以向程式返回錯誤原因。例項
在機房收費系統中最讓我們頭疼的一個功能模組就是組合查詢功能,在這個系統中有四個一樣的窗體,其中的程式碼都是差不多的,都是根據不同的條件對不同的表進行查詢操作,在第一遍的時候,我們就理由字串的拼接完成一個後,就利用複製程式碼的手段來實現,這樣就會出現大量的重複程式碼,在重構的時候再次遇到這個問題,不會在重複的複製程式碼,而是用到了模板方法(在介紹組合查詢的時候詳細介紹)和儲存過程,下面給大家分享一下:-- =============================================
-- Author: 鄭浩
-- Create date: 2014-12-26
-- Description: 用於組合查詢時和資料庫互動
-- =============================================
ALTER PROCEDURE [dbo].[PROC_GroupCheck]
-- Add the parameters for the stored procedure here
@cobFieldName1 varchar(50),
@cobOperator1 varchar(50),
@txtContent1 varchar(50),
@cobFieldName2 varchar(50),
@cobOperator2 varchar(50),
@txtContent2 varchar(50),
@cobFieldName3 varchar(50),
@cobOperator3 varchar(50),
@txtContent3 varchar(50),
@cobRelations1 varchar(50),
@cobRelations2 varchar(50),
@tableName varchar(50)
AS
declare @TempSql varchar(500)--臨時存放sql語句
BEGIN
SET @TempSql='SELECT * FROM ' [email protected] +' WHERE ' [email protected] [email protected]+char(39) + @txtContent1 + char(39)
--SET @TempSql='SELECT * FROM '+'ZH_StudentInfo' +' WHERE ' [email protected] [email protected]+char(39) + @txtContent1 + char(39)
if (@cobRelations1 is not null)
BEGIN
SET @[email protected][email protected]+CHAR(32)[email protected] [email protected]+CHAR(39)[email protected]+CHAR(39)
if (@cobRelations2 is not null)
BEGIN
SET @[email protected][email protected]+CHAR(32)[email protected][email protected]+CHAR(39)[email protected]+CHAR(39)
END
END
EXECUTE(@TempSql)
END
這樣我們的D層就非常的輕鬆了,只負責呼叫這個儲存過程和傳入相應的引數就可以了,這樣我們就可以傳進來的引數對不同的表進行操作了。