存儲過程
出自 MBA智库百科(https://wiki.mbalib.com/)
存儲過程(Store Procedure)
目錄 |
存儲過程是 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