預存程序——【牛腩新聞發布系統】,新聞發布系統
一、什麼是預存程序?定義:
預存程序(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 ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:王美-- Create date: 2015年2月6日23:11:35-- Description:取出最新10條新聞(所屬分類,新聞標題)-- =============================================CREATE PROCEDURE procNewsSelectNewNews -- Add the parameters for the stored procedure hereASBEGIN---選擇最上面的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---降序排列ENDGOexec procNewsSelectNewNews</span>
四、後記
對於預存程序,使用的還不是很頻繁,對它的感官還不是很立體。如有不妥,還望指正,歡迎交流!