存儲過程提供高效率和安全性優勢
Microsoft SQL Server提供了存儲過程機制,通過將Transact-SQL語句分組為可管理的塊來簡化數據庫開發過程。 大多數SQL Server開發人員都非常欣賞存儲過程,他們發現他們獲得的高效和安全優勢非常值得及時進行前期投資。
使用存儲過程的好處
為什麼開發人員應該使用存儲過程?
以下是這項技術的主要優點:
- 預編譯執行: SQL Server編譯每個存儲過程一次,然後重新使用執行計劃。 當存儲過程被重複調用時,這會大大提高性能。
- 客戶機/服務器流量減少:如果網絡帶寬是您的環境中的一個問題,您將很高興得知存儲過程可以將長SQL查詢減少為通過線路傳輸的單個線路。
- 代碼和編程抽象的高效重用:存儲過程可以被多個用戶和客戶端程序使用。 如果你有計劃地使用它們,你會發現開發週期花費的時間更少。
- 增強的安全控制:您可以授予用戶權限,以獨立於基礎表權限執行存儲過程。
存儲過程與用戶定義的函數類似,但存在細微差別。
結構體
存儲過程與其他編程語言中的構造類似。
他們接受在執行時指定的輸入參數形式的數據。 這些輸入參數(如果實現的話)被用於執行一系列產生一些結果的語句。 此結果通過使用記錄集,輸出參數和返回碼返回到調用環境。
這可能聽起來很滿意,但你會發現存儲過程其實很簡單。
例
我們來看看與本頁底部顯示的名為inventory的表相關的實際示例。 這些信息會實時更新,倉庫管理人員會不斷檢查存儲在倉庫中的產品的水平,並可供發貨。 過去,每位經理都會運行類似以下的查詢:
選擇產品,數量
從庫存中
WHERE倉庫='FL'
這導致了SQL Server的低效率性能。 每次倉庫管理者執行查詢時,數據庫服務器都被迫重新編譯查詢並從頭開始執行。 它還要求倉庫經理了解SQL和適當的權限來訪問表信息。
相反,該過程可以通過使用存儲過程來簡化。 以下是稱為sp_GetInventory的過程的代碼,用於檢索給定倉庫的庫存水平。
CREATE PROCEDURE sp_GetInventory
@location varchar(10)
如
選擇產品,數量
從庫存中
WHERE Warehouse = @location
佛羅里達倉庫經理可以通過發出以下命令來訪問庫存水平:
EXECUTE sp_GetInventory'FL'
紐約倉庫經理可以使用相同的存儲過程來訪問該區域的庫存:
EXECUTE sp_GetInventory'NY'
當然,這是一個簡單的例子,但是抽象的好處可以在這裡看到。 倉庫經理不需要了解SQL或程序的內部工作。 從性能角度來看,存儲過程可以創造奇蹟。 SQL Server一次創建一個執行計劃,然後通過在執行時插入適當的參數來重新使用它。
既然您已經了解了存儲過程的好處,那麼您就可以使用它們了。
嘗試一些示例並衡量所實現的性能增強 - 您會感到驚訝!
庫存表
ID | 產品 | 倉庫 | 數量 |
142 | 綠豆 | 紐約 | 100 |
214 | 豌豆 | FL | 200 |
825 | 玉米 | 紐約 | 140 |
512 | 利馬豆 | 紐約 | 180 |
491 | 番茄 | FL | 80 |
379 | 西瓜 | FL | 85 |