為什么要使用存儲過程?以下是存儲過程技術(shù)的幾大主要優(yōu)點(diǎn):
結(jié)構(gòu)
存儲過程的結(jié)構(gòu)跟其他編程語言非常相似。存儲過程接受輸入?yún)?shù)形式的數(shù)據(jù)。這些輸入?yún)?shù)在執(zhí)行系列語句的時(shí)候被運(yùn)用并生成結(jié)果。結(jié)果在通過使用記錄集、輸出參數(shù)和返回代碼返回。聽起來似乎很復(fù)雜,實(shí)際上存儲程序非常簡單。
實(shí)例
假設(shè)我們有如下名為Inventory的表格,表格里的數(shù)據(jù)需要實(shí)時(shí)更新,倉庫經(jīng)理會不停地檢查倉庫里的貨存數(shù)量和可供發(fā)貨的貨存數(shù)量。以前,每一個(gè)地區(qū)的倉庫經(jīng)理都會進(jìn)行如下查詢:
| 以下是引用片段: SELECT Product, Quantity FROM Inventory WHERE Warehouse = 'FL' |
這樣的查詢使SQL Server性能效率非常低下。每次倉庫經(jīng)理執(zhí)行該查詢,數(shù)據(jù)庫服務(wù)器都不得不重新對其進(jìn)行編譯然后重新開始執(zhí)行。這樣的查詢還要求倉庫經(jīng)理具備SQL方面的知識,并且擁有訪問表格數(shù)據(jù)的權(quán)限。
我們可以通過使用存儲過程來簡化這個(gè)查詢過程。首先創(chuàng)建一個(gè)名為 sp_GetInventory的過程,能夠獲取一個(gè)已有倉庫的貨存水平。下面是創(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' |
當(dāng)然,這只是一個(gè)很簡單的例子,但是可以看出來存儲過程的好處。倉庫經(jīng)理不一定要懂得SQL或者存儲過程內(nèi)在的工作原理。從性能的角度看的話,存儲過程無疑大大地提高了工作的效率。SQL Server只需創(chuàng)建執(zhí)行計(jì)劃一次,然后就可以重復(fù)使用存儲過程,只需要在每次執(zhí)行時(shí)輸入適當(dāng)?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 |
新聞熱點(diǎn)
疑難解答
圖片精選