1. 程式人生 > >牛腩新聞釋出系統 (三)走進儲存過程

牛腩新聞釋出系統 (三)走進儲存過程

什麼是儲存過程

我第一次運用儲存過程是在機房重構時,在進行組合查詢設計時我需要通過多條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語句,只需要呼叫儲存過程中定義的名稱,引數即可。非常方便的