牛腩新聞釋出系統 (三)走進儲存過程
阿新 • • 發佈:2018-12-12
什麼是儲存過程
我第一次運用儲存過程是在機房重構時,在進行組合查詢設計時我需要通過多條sql語句查詢資訊,欄位和屬性,我把sql語句寫在了資料庫的“儲存過程”中,而在程式中只需要呼叫儲存過程,就可以執行查詢語句的功能了。下面是我組合查詢的儲存過程展示
USE [EngineSystem]
GO
/****** Object: StoredProcedure [dbo].[PROC_CombinedQuery] Script Date: 2018/11/13 15:40:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <劉桐>
-- Create date: <2018.09.05>
-- Description: <機房重構組合查詢學生資訊>
-- =============================================
ALTER PROCEDURE [dbo].[PROC_CombinedQuery]
-- Add the parameters for the stored procedure here
@DbName nvarchar(50),
@cmbText1 nvarchar(50),
@cmbText2 nvarchar(50),
@cmbText3 nvarchar(50),
@cmbSymbol1 nvarchar(50),
@cmbSymbol2 nvarchar(50),
@cmbSymbol3 nvarchar(50),
@txtDateTime1 nvarchar(50),
@txtDateTime2 nvarchar(50),
@txtDateTime3 nvarchar(50),
@cmbRelation1 nvarchar(50),
@cmbRelation2 nvarchar(50)
AS
declare @TempSql varchar(500)--臨時存放sql語句
--Char(32)是空格 插入(39)是單引號
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
--一個條件的查詢
SET @TempSql='select * from ' [email protected]+' where '+char(32)[email protected][email protected]+char(39)[email protected]+char(39)
if(@cmbRelation1!='')
--兩個條件的查詢
SET @[email protected]+char(32)[email protected]+char(32)[email protected][email protected]+char(39)[email protected]+char(39)
if(@cmbRelation2!='')
--三個條件的查詢
SET @ [email protected]+char(32)[email protected]+char(32)[email protected][email protected]+char(39)[email protected]+char(39)
execute(@Tempsql)
END
儲存過程的優點
確實,在儲存過程中寫的sql語句也不少呀,為啥不直接寫在程式檔案中呢?
在實際開發中,我發現了寫在儲存過程裡的兩個優點
- 儲存在特定的儲存過程中,一次編譯,即可執行。減少了程式檔案中的程式碼量,這樣你在對程式檔案中的程式碼進行修改時,減少了查詢量,同時單獨放在儲存過程中又保證了這段程式碼的完整性和安全性。
- 通過儲存過程執行SQL語句比寫在程式中再執行SQL語句的效率高
儲存過程的應用
在《牛腩》中,我們同樣需要很多sql語句對新聞進行各種條件的查詢,刪除和更新,又一次應用了儲存過程後,更加感受到了它的強大。
<1>儲存過程的位置
以sqlserver為例,找到sqlserver中的一個數據庫展開——找到可編譯性展開——右鍵儲存過程——新建儲存過程
<2>儲存過程程式碼說明。下圖是一個已經成功執行的儲存過程
<3>程式呼叫儲存過程,執行sql語句增刪改查功能
可以看到,在呼叫儲存過程時,我們在DAL(資料傳輸層)不再需要些sql語句,只需要呼叫儲存過程中定義的名稱,引數即可。非常方便的