Stored Procedure (儲存程序,也可稱為 SP) 是資料庫系統中儲存多個 SQL 邏輯,以便應用程式呼叫的資料庫物件,可作為子程式使用 [1]。
Stored Procedure 的優缺點
優點:
- 減少網路流量,不用傳送整串 raw SQL,只要呼叫 SP 名字就能使用並取得結果。
- 如果有多個程式要呼叫一樣的查詢語法,不用重複多寫。
- 封裝起來,隱藏複雜的商業邏輯,減少被修改的風險。[2]
- 資料庫系統會對其預先產生執行計畫,不需要像 Raw SQL 每次執行時都重新產生執行計畫,增加執行時間。
缺點:
- 因為不是寫在程式檔案內,不容易納入版本控制,無法追蹤每一次變更的內容。(替代作法:在 SP 內加入 Changelog,紀錄變更內容。)
- 不像 ORM 一樣可以在 IDE 內透過偵錯模式執行,比較難找到邏輯上的錯誤。
- 不容易透過搜尋找到所有需要修改的 SP 內容。
查詢含特定文字的Stored Procedure或View
因為 SP 沒辦法像程式專案一樣,可以透過 IDE 的「所有參考」找到使用物件的程式碼,或是用搜尋功能查詢整個專案,如果要一次查詢或修改多個 SP 的特定文字,需要透過以下的程式碼 [3] 查詢 SP 或 View 中的文字:
SELECT DISTINCT o.name, c.*
FROM syscomments c
INNER JOIN sysobjects o ON c.id=o.id
WHERE (o.xtype = 'P' --查SP
OR o.xtype = 'V') --查View
AND (o.name LIKE '%Text%' --查SP或View名稱
OR c.text LIKE '%Text%') --查SP或View內含文字