【SQL Server】--儲存過程

ZeroWM發表於2015-02-07


一、什麼是儲存過程?

定義:          

  儲存過程(Stored Procedure)是在大型資料庫中,將常用的或複雜的工作,預先用SQL語句寫好並用一個指定的名稱儲存起來,一次編譯後再次呼叫不需要編譯,使用者通過指定儲存過程的名字並給出引數來執行。

分類:

系統儲存過程:sp_開頭

擴充套件儲存過程:xp_開頭

使用者自定義儲存過程:

推薦命名語法:[proc] [MainTableName] By [FieldName(optional)] [Action]

        字首必須有proc ,儲存過程訪問的物件,可選欄位名是條件子句,最後的動詞是執行的任務。例子:procClientRateSelect

        注意:不推薦命名為sp_為字首,因為這樣SQL Server會首先查詢系統儲存過程,會導致執行緩慢



二、一般SQL語句與儲存過程的區別

1.提高效能,儲存過程只需編譯一次,一般SQL執行一次編譯一次,可以提高資料庫執行速度。

2.封裝特性,可以將複雜的資料庫操作(增、刪、改、查)用儲存過程封裝起來,與資料庫提供的事務結合。

3.可重複使用,減少資料庫開發人員工作量。

4.安全性高,只有設定的使用者具有儲存過程使用權。


三、儲存過程例項


1.SQLHelper呼叫儲存過程

<span style="font-size:18px;"> public DataTable test(string procName)
        {
            DataTable dt = new DataTable();
            cmd = new SqlCommand(procName, GetConn());
            cmd.CommandType  = CommandType.StoredProcedure;
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(sdr);
            }
            return dt;
        }</span>

主要是把 command命令裡面的procName賦值為儲存過程名,把cmd.CommandType賦值為CommandType.StoredProcedure即可。



2.儲存過程的書寫:

<span style="font-size:18px;">SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		王美
-- Create date: 2015年2月6日23:11:35
-- Description:	取出最新10條新聞(所屬分類,新聞標題)
-- =============================================
CREATE PROCEDURE procNewsSelectNewNews 
	-- Add the parameters for the stored procedure here

AS
BEGIN
---選擇最上面的10條
	select top 10 n.id,n.title ,n.createTime ,c.[name]  from news n
	----類別表的id=新聞表裡面的id,內連線
	inner join category c on n.caId=c.id 
	order by n.createTime desc---降序排列
END
GO

exec procNewsSelectNewNews</span>



四、後記

  對於儲存過程,使用的還不是很頻繁,對它的感官還不是很立體。如有不妥,還望指正,歡迎交流!

相關文章