什麼是存儲過程
存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作爲一個單元處理,是數據庫中的一個對象。
存儲過程存儲在數據庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變量、有條件執行以及其它強大的編程功能。
存儲過程的類型
1、系統存儲過程:以“sp_”爲前綴標識,存儲在“master”數據庫中,提供對系統表的檢索和管理功能。
2、擴展存儲過程:以“xp_”爲前綴標識,通過執行外部DLL來實現功能。
3、本地存儲過程:創建在用戶數據庫中。
4、臨時存儲過程:主要用於用戶會話中臨時存儲的功能。
5、遠程存儲過程:爲早期功能。
存儲過程的優點
1、與其他應用程序共享應用邏輯,確保一致的數據訪問和修改。存儲過程封裝了商務邏輯。若規則或策略有變化,則只需要修改服務器上的存儲過程,所有的客戶端就可以直接使用。
2、屏蔽數據庫模式的詳細資料。用戶不需要訪問底層的數據庫和數據庫內的對象。
3、提供了安全性機制。用戶可以被賦予執行存儲過程的權限,而不必在存儲過程引用的所有對象上都有權限。
4、改善性能。預編譯的 Transact-SQL 語句,可以根據條件決定執行哪一部分。
5、減少網絡通信量。客戶端用一條語句調用存儲過程,就可以完成可能需要大量語句才能完成的任務,這樣減少了客戶端和服務器之間的請求/回答包。
存儲過程的命名規範及命名方法
方法一
A、“表”單數形式命名
語法:[proc]_[MainTableName]_([FieldName]_)[Action]
-- 創建/刪除/更新/等操作採用單數表形式命名
proc_OfferThread_Create
proc_OfferThread_Update
proc_OfferThread_Delete
其他輔助操作:
proc_OfferThread_Status_Update
proc_OfferThread_PrevNext
proc_OfferThread_Get (如果不用ByID指明則默認是ID)
B、“表”複數形式命名
語法:[proc]_[MainTableNames]_[Action(Condition)]
-- 讀取列表或分頁集合採用複數表形式
proc_OfferThreads_Get
proc_OfferThreads_GetByName (如果不用By指明則默認是ID)
proc_OfferThreads_Delete (默認批量按用戶編號刪除)
proc_OfferThreads_DeleteByUserName (批量按用戶登錄名刪除)
proc_OfferThreads_DeleteByName (批量按名稱刪除)
proc_OfferThreads_GetThreadSet (讀取分頁)
基本原則:
註釋:假如存儲過程以sp_ 爲前綴開始命名那麼會運行的稍微的緩慢,這是因爲SQL Server將首先查找系統存儲過程,所以我們決不推薦使用sp_作爲前綴。
存儲過程命名語法:
[proc] [MainTableName] By [FieldName(optional)] [Action]
(1) 所有的存儲過程必須有前綴'proc'. 所有的系統存儲過程都有前綴"sp_", 推薦不使用這樣的前綴因爲會稍微的減慢。
(2) 表名就是存儲過程訪問的對象。
(3) 可選字段名就是條件子句。 例如:procClientByCoNameSelect, procClientByClientIDSelect
(4) 最後的行爲動詞就是存儲過程要執行的任務:
如果存儲過程返回一條記錄那麼後綴是:Select
如果存儲過程插入數據那麼後綴是:Insert
如果存儲過程更新數據那麼後綴是:Update
如果存儲過程有插入和更新那麼後綴是:Save
如果存儲過程刪除數據那麼後綴是:Delete
如果存儲過程更新表中的數據 (ie. drop and create) 那麼後綴是:Create
如果存儲過程返回輸出參數或0,那麼後綴是:Output
從前的寫法:
查詢:procGetRate 或 sp_GetRate
添加:procEmailMergeAdd
現在的寫法:
查詢:procClientRateSelect
添加:procEmailMerge insert