預存程序功能的優點
為什麼要使用預存程序?以下是預存程序技術的幾大主要優點:
- 先行編譯執行程式。SQL Server只需要對每一個預存程序進行一次編譯,然後就可以重複使用執行計畫。這個特點通過重複調用儲存程式極大地提高了程式的效能。
- 縮短用戶端/伺服器之間的資訊傳輸量。如果你的工作環境頻寬有限,那麼預存程序技術肯定能夠滿足你,因為它能夠把需要傳輸的長的SQL查詢縮短成一行。
- 有效重複使用代碼和編程。預存程序可以為多個使用者所使用,也可以用於多個客戶程式。這樣可以減少程式開發週期的時間。
- 增強安全性控制。可以允許使用者單獨執行預存程序,而不給於其訪問表格的許可權。
結構
預存程序的結構跟其他程式設計語言非常相似。預存程序接受輸入參數形式的資料。這些輸入參數在執行系列語句的時候被運用並產生結果。結果在通過使用記錄集、輸出參數和傳回碼返回。聽起來似乎很複雜,實際上儲存程式非常簡單。
執行個體
假設我們有如下名為Inventory的表格,表格裡的資料需要即時更新,倉庫經理會不停地檢查倉庫裡的貨存數量和可供發貨的貨存數量。以前,每一個地區的倉庫經理都會進行如下查詢:
以下是引用片段: SELECT Product, Quantity FROM Inventory WHERE Warehouse = 'FL' |
這樣的查詢使SQL Server效能效率非常低下。每次倉庫經理執行該查詢,資料庫伺服器都不得不重新對其進行編譯然後重新開始執行。這樣的查詢還要求倉庫經理具備SQL方面的知識,並且擁有訪問表格式資料的許可權。
我們可以通過使用預存程序來簡化這個查詢過程。首先建立一個名為 sp_GetInventory的過程,能夠擷取一個已有倉庫的貨存水平。下面是建立該程式的SQL代碼:
以下是引用片段: CREATE PROCEDURE sp_GetInventory @location varchar(10) AS SELECT Product, Quantity FROM Inventory WHERE Warehouse = @location |
A地區的倉庫經理可以執行下面的命令來獲得貨存水平:
以下是引用片段: EXECUTE sp_GetInventory 'FL' |
B地區的倉庫經理可以使用同樣的預存程序來訪問該地區的貨存資訊。
以下是引用片段: EXECUTE sp_GetInventory 'NY' |
當然,這隻是一個很簡單的例子,但是可以看出來預存程序的好處。倉庫經理不一定要懂得SQL或者預存程序內在的工作原理。從效能的角度看的話,預存程序無疑大大地提高了工作的效率。SQL Server只需建立執行計畫一次,然後就可以重複使用預存程序,只需要在每次執行時輸入適當的參數就可以了。
貨存表格:
ID |
Product |
Warehouse |
Quantity |
142 |
Green beans |
NY |
100 |
214 |
Peas |
FL |
200 |
825 |
Corn |
NY |
140 |
512 |
Lima beans |
NY |
180 |
491 |
Tomatoes |
FL |
80 |
379 |
Watermelon |
FL |
85 |