大型資料庫系統中,存儲過程與觸發器地位關鍵。兩者本質皆為 SQL 語句與流程控制語句集合,**觸發器本質也是一種存儲過程**。存儲過程運算時生成執行方案,後續執行速度極快。SQL Server 2000 不僅提供使用者自訂存儲過程,也提供許多系統存儲過程作為工具。
存儲過程為完成特定功能的 SQL 語句集,**經編譯後儲存於資料庫**。用戶透過指定名稱並給出參數(若有)執行它。
SQL Server 版本中存儲過程分兩類:系統提供(儲於 master,sp_ 前綴,從系統表獲取資訊支援管理)與使用者自訂(完成特定功能如查詢所需資訊)。本章重點在使用者自訂存儲過程。
建立後可多次呼叫,無需重寫 SQL。資料庫專業人員可隨時修改存儲過程,**應用程式源碼零影響**(源碼僅含呼叫語句),極大提升程式可移植性。
包含大量 T-SQL 代碼或多次執行的操作,存儲過程比批次快得多。因為預編譯:首次執行時查詢優化器分析優化並產出執行計畫儲於系統表。批次 T-SQL 每次執行都要編譯優化,相對較慢。
同一資料庫操作(查詢/修改),組織成存儲過程後,客戶端呼叫僅傳送呼叫語句;否則傳送多條 SQL 語句,大幅增加網路流量、降低負載。
系統管理員透過限制執行特定存儲過程的權限,實現對相應資料存取權限的限制,防止非授權用戶存取資料,保障資料安全。(第 14 章將詳細介紹此應用)
注意: 存儲過程雖有參數與返回值,但**與函數不同**。返回值僅指明執行成敗,**不能像函數直接呼叫**——呼叫時名稱前必須加 EXEC 保留字(執行方法見下節)。