SQL Server 存儲過程解析
為什么要使用存儲過程?以下是存儲過程技術的幾大主要優(yōu)點:
- 預編譯執(zhí)行程序。SQL Server只需要對每一個存儲過程進行一次編譯,然后就可以重復使用執(zhí)行計劃。這個特點通過重復調用存儲程序極大地提高了程序的性能。
- 縮短客戶端/服務器之間的信息傳輸量。如果你的工作環(huán)境帶寬有限,那么存儲過程技術肯定能夠滿足你,因為它能夠把需要傳輸?shù)拈L的SQL查詢縮短成一行。
- 有效重復使用代碼和編程。存儲過程可以為多個用戶所使用,也可以用于多個客戶程序。這樣可以減少程序開發(fā)周期的時間。
- 增強安全性控制??梢栽试S用戶單獨執(zhí)行存儲過程,而不給于其訪問表格的權限。
結構
存儲過程的結構跟其他編程語言非常相似。存儲過程接受輸入?yún)?shù)形式的數(shù)據(jù)。這些輸入?yún)?shù)在執(zhí)行系列語句的時候被運用并生成結果。結果在通過使用記錄集、輸出參數(shù)和返回代碼返回。聽起來似乎很復雜,實際上存儲程序非常簡單。
實例
假設我們有如下名為Inventory的表格,表格里的數(shù)據(jù)需要實時更新,倉庫經(jīng)理會不停地檢查倉庫里的貨存數(shù)量和可供發(fā)貨的貨存數(shù)量。以前,每一個地區(qū)的倉庫經(jīng)理都會進行如下查詢:
以下是引用片段: SELECT Product, Quantity FROM Inventory WHERE Warehouse = 'FL' |
這樣的查詢使SQL Server性能效率非常低下。每次倉庫經(jīng)理執(zhí)行該查詢,數(shù)據(jù)庫服務器都不得不重新對其進行編譯然后重新開始執(zhí)行。這樣的查詢還要求倉庫經(jīng)理具備SQL方面的知識,并且擁有訪問表格數(shù)據(jù)的權限。
我們可以通過使用存儲過程來簡化這個查詢過程。首先創(chuàng)建一個名為 sp_GetInventory的過程,能夠獲取一個已有倉庫的貨存水平。下面是創(chuàng)建該程序的SQL代碼:
以下是引用片段: CREATE PROCEDURE sp_GetInventory @location varchar(10) AS SELECT Product, Quantity FROM Inventory WHERE Warehouse = @location |
A地區(qū)的倉庫經(jīng)理可以執(zhí)行下面的命令來獲得貨存水平:
以下是引用片段: EXECUTE sp_GetInventory 'FL' |
B地區(qū)的倉庫經(jīng)理可以使用同樣的存儲過程來訪問該地區(qū)的貨存信息。
以下是引用片段: EXECUTE sp_GetInventory 'NY' |
當然,這只是一個很簡單的例子,但是可以看出來存儲過程的好處。倉庫經(jīng)理不一定要懂得SQL或者存儲過程內在的工作原理。從性能的角度看的話,存儲過程無疑大大地提高了工作的效率。SQL Server只需創(chuàng)建執(zhí)行計劃一次,然后就可以重復使用存儲過程,只需要在每次執(zhí)行時輸入適當?shù)膮?shù)就可以了。
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 |
相關文章
SQL Server 中的數(shù)據(jù)類型隱式轉換問題
這篇文章主要介紹了SQL Server 中的數(shù)據(jù)類型隱式轉換問題,本文給大家介紹的非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08sqlserver 函數(shù)、存儲過程、游標與事務模板
SQL 函數(shù)、存儲過程、游標與事務模板,學習sqlserver的朋友很多情況下都需要用得到。2010-08-08清除SQL SERVER錯誤日志出現(xiàn)操作系統(tǒng)錯誤的解決方法
SQL Server 外部的進程可能會阻止 SQL Server 讀取這些文件。因此,錯誤日志條目可能已丟失,并且或許不可能查看某些 SQL Server 錯誤日志。請確保任何其他進程都未將該文件鎖定為只寫訪問2013-08-08談談sqlserver自定義函數(shù)與存儲過程的區(qū)別
這篇文章主要介紹了談談sqlserver自定義函數(shù)與存儲過程的區(qū)別,需要的朋友可以參考下2014-09-09向數(shù)據(jù)庫中插入數(shù)據(jù)并返回當前插入的行數(shù)及全局變量@@IDENTITY應用
向數(shù)據(jù)庫中插入數(shù)據(jù)并返回當前插入的的行數(shù),這項功能很實用的可以判斷是否為批量插入主要是利用全局變量@@IDENTITY實現(xiàn),感興趣的朋友可以了解下啊,希望本文對你鞏固sql知識很有幫助的2013-01-01SQL Server誤設置max server memory的處理方法
這篇文章主要給大家介紹了關于SQL Server誤設置max server memory的處理方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SQL Server具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧下2019-12-12清除SQL?Server數(shù)據(jù)庫日志(ldf文件)的方法匯總
隨著系統(tǒng)運行時間的推移,數(shù)據(jù)庫日志文件會變得越來越大,這時我們需要對日志文件進行備份或清理,這篇文章主要介紹了清除SQL?Server數(shù)據(jù)庫日志(ldf文件)的幾種方法,需要的朋友可以參考下2022-10-10