存儲過程是SQL 語句和流程控制語句的預編譯集合,以一個名稱存儲並做爲一個單元處理。sql
建立存儲過程數據庫
create procedure sp_name
@[參數名] [類型],@[參數名] [類型]
as
begin
.........
end
調用存儲過程
安全
exec sp_name [參數名]
刪除存儲過程
drop procedure sp_name
存儲過程的優勢有:網絡
- 使用存儲過程可提升數據庫執行速度。在建立時預編譯,之後每次執行該存儲過程時不須要從新編譯,所以執行速度很快。
- 存儲過程能夠重複使用。它容許模塊化程序設計,只須要建立一個存儲過程,之後在程序中就能夠屢次調用。
- 存儲過程能夠用於下降網絡流量,存儲過程代碼直接存儲於數據庫中。例如一個須要數百行的SQL代碼的操做能夠由一條執行存儲過程的語句完成,不須要在網絡中發送數百行代碼。
- 當對數據庫進行復雜操做時,可將此複雜操做用存儲過程封裝起來與數據庫提供的事務處理結合一塊兒使用。
- 必定狀況下可維護性高,更新存儲過程一般比更改、測試以及從新部署程序集須要較少的時間和精力。
- 更好的版本控制,經過使用 Microsoft Visual SourceSafe 或某個其餘源代碼控制工具,您能夠輕鬆地恢復到或引用舊版本的存儲過程。
- 加強安全性
- 經過向用戶授予對存儲過程(而不是基於表)的訪問權限,它們能夠提供對特定數據的訪問。
- 提升代碼安全,減小SQL注入(但未完全解決,例如,將數據操做語言--DML,附加到輸入參數)。
- SqlParameter 類指定存儲過程參數的數據類型,做爲深層次防護性策略的一部分,能夠驗證用戶提供的值類型(並非萬無一失)。
存儲過程的缺點有:
數據結構
- 若是數據結構發生變化,或者其餘緣由引發了存儲過程的參數或者返回數據的更改,須要更新程序集中的全部相關代碼。這使維護更加困難。
- 可移植性差。