存儲過程(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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章