預存程序的優缺點:
優點:
1.由於應用程式隨著時間推移會不斷更改,增刪功能,T-SQL過程代碼會變得更複雜,StoredProcedure為封裝此代碼提供了一個替換位置。
2.執行計畫(預存程序在首次運行時將被編譯,這將產生一個執行計畫-- 實際上是 Microsoft SQL Server為在預存程序中擷取由 T-SQL 指定的結果而必須採取的步驟的記錄。)緩衝改善效能。
........但sql server新版本,執行計畫已針對所有 T-SQL 批處理進行了緩衝,而不管它們是否在預存程序中,所以沒比較優勢了。
3.預存程序可以用於降低網路流量,預存程序代碼直接儲存於資料庫中,所以不會產生大量T-sql語句的代碼流量。
4.使用預存程序使您能夠增強對執行計畫的重複使用,由此可以通過使用遠端程序呼叫 (RPC) 處理伺服器上的預存程序而提高效能。RPC 封裝參數和調用伺服器端過程的方式使引擎能夠輕鬆地找到匹配的執行計畫,並只需插入更新的參數值。
5.可維護性高,更新預存程序通常比更改、測試以及重新部署程式集需要較少的時間和精力。
6.代碼精簡一致,一個預存程序可以用於應用程式代碼的不同位置。
7.更好的版本控制,通過使用 Microsoft Visual SourceSafe 或某個其他原始碼控制工具,您可以輕鬆地恢複到或引用舊版本的預存程序。
8.增強安全性:
a、通過向使用者授予對預存程序(而不是基於表)的存取權限,它們可以提供對特定資料的訪問;
b、提高代碼安全,防止 SQL注入(但未徹底解決,例如,將資料操作語言--DML,附加到輸入參數);
c、SqlParameter 類指定預存程序參數的資料類型,作為深層次防禦性策略的一部分,可以驗證使用者提供的實值型別(但也不是萬無一失,還是應該傳遞至資料庫前得到附加驗證)。
缺點:
1.如果更改範圍大到需要對輸入預存程序的參數變更,或者要更改由其返回的資料,則您仍需要更新程式集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。
2.可移植性差
由於預存程序將應用程式綁定到 SQL Server,因此使用預存程序封裝商務邏輯將限制應用程式的可移植性。如果應用程式的可移植性在您的環境中非常重要,則將商務邏輯封裝在不特定於 RDBMS 的中介層中可能是一個更佳的選擇。