3 回答

TA貢獻1842條經驗 獲得超21個贊
存儲過程是可以以兩種方式執行的一批SQL語句。大多數主要的DBM支持存儲過程。但是,并非全部。您將需要與您的特定DBMS幫助文檔一起驗證具體信息。由于我最熟悉SQL Server,因此將其作為示例。
要創建存儲過程,語法非常簡單:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
因此,例如:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
存儲過程的一個好處是,您可以將數據訪問邏輯集中到一個位置,然后便于DBA優化。存儲過程還具有安全優勢,因為您可以授予存儲過程執行權限,但用戶不需要對基礎表具有讀/寫權限。這是反對SQL注入的良好第一步。
存儲過程確實有缺點,基本上是與基本CRUD操作相關的維護。假設每個表都有一個Insert,Update,Delete以及至少一個基于主鍵的選擇,這意味著每個表將具有4個過程?,F在,建立一個包含400個表的體面大小的數據庫,您就有1600個過程!并假設您沒有可能會重復的重復項。
在這里使用ORM或其他方法自動生成基本的CRUD操作有很多優點。

TA貢獻1777條經驗 獲得超3個贊
存儲過程是一組已創建并存儲在數據庫中的SQL語句。存儲過程將接受輸入參數,因此多個客戶端可以使用不同的輸入數據在網絡上使用單個過程。存儲過程將減少網絡流量并提高性能。如果我們修改存儲過程,則所有客戶端都將獲取更新的存儲過程。
創建存儲過程的樣本
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
使用存儲過程的優點
存儲過程允許模塊化編程。
您可以創建一次該過程,將其存儲在數據庫中,然后在程序中多次調用它。
存儲過程可以加快執行速度。
如果該操作需要重復執行大量SQL代碼,則存儲過程可能會更快。首次執行時,將對它們進行解析和優化,并且存儲過程的編譯版本保留在內存緩存中以備后用。這意味著不需要每次使用都重新解析和優化存儲過程,從而大大縮短了執行時間。
存儲過程可以減少網絡流量。
可以通過一條在過程中執行代碼的語句來執行需要數百行Transact-SQL代碼的操作,而不是通過網絡發送數百行代碼。
存儲過程為您的數據提供更好的安全性
即使沒有權限直接執行該過程的語句,也可以向用戶授予執行存儲過程的權限。
在SQL Server中,我們有不同類型的存儲過程:
系統存儲過程
用戶定義的存儲過程
擴展存儲過程
系統存儲的過程存儲在master數據庫中,這些過程以sp_前綴開頭。這些過程可用于執行各種任務,以支持系統表中外部應用程序調用的SQL Server功能
示例:sp_helptext [StoredProcedure_Name]
用戶定義的存儲過程通常存儲在用戶數據庫中,并且通常旨在完成用戶數據庫中的任務。盡管編碼這些程序不使用的sp_前綴,因為如果我們使用的sp_第一個前綴,它會檢查主數據庫,然后它涉及到用戶定義的數據庫。
擴展存儲過程是從DLL文件調用函數的過程。如今,不建議使用擴展存儲過程,因為最好避免使用擴展存儲過程。
添加回答
舉報