存儲過程(Stored PRocedure)是一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫。用戶通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。
優點: 1.由于存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進行分析、優化,并給出最終被存在系統表中的執行計劃,不像解釋執行的SQL語句那樣在提出操作請求的時候才進行語法分析和優化工作,因而運行效率高,它提供了在服務端快速運行SQL語句的有效途徑。
2.存儲過程降低了客戶機和服務器之間的通信量,客戶機上的應用程序只要通過網絡向服務器發出存儲過程的名字和參數,就可以讓RDBMS執行許多條SQL語句,并執行數據處理,只有最中結果才返回客戶端。
3.存儲過程允許標準組件式編程,存儲過程在被創建以后可以在程序中被多次調用,而不必重新編寫該存儲過程的SQL語句。而且數據庫專業人員可隨時對存儲過程進行修改,但對應用程序源代碼毫無影響(因為應用程序源代碼只包含存儲過程的調用語句),從而極大地提高了程序的可移植性。
二、基本語法1.變量聲明:
declare @variable int 或者 @variable int
多個變量的聲明 declare @variable int, @va vachar(10),....
區別:declare的含義是定義一個存儲過程中使用的變量,而不加declare的是存儲過程需要傳入的參數,下面一個具體的實例可以看得更清楚:
--創建存儲過程create procedure sl_procedure@va int --參數聲明as declare @variable int --變量聲明set @variable=22 --變量賦值select * from Albumswhere ArtistId=@va--執行存儲過程exec sl_procedure 12 --12 為傳入的參數
2.變量賦值:
set @variable=22 --變量賦值
變量賦值時變量前必須加set
3.條件控制語句:
if(條件) begin --執行語句塊 endelse begin --執行語句塊 end
3.循環控制語句
while(條件) begin --執行語句塊 end三、實例分析
1.帶輸入參數的存儲過程
--根據專輯名 查找藝術家--創建存儲過程Create procedure ArtistNameOut1@albumTitle varchar(20) --參數聲明as select ar.ArtistName from Artists arjoin Albums alon ar.ArtistId=al.AlbumIdwhere al.AlbumTitle=@albumTitleGO--執行存儲過程--參數傳遞方式1,多個參數以 , 號隔開exec ArtistNameOut1 @albumTitle='Worlds' -- 參數傳入--參數傳遞方式2,exec ArtistNameOut1 'Worlds' -- 參數傳入
2.帶輸出參數的存儲過程
--根據專輯名 輸出藝術家--創建存儲過程Create procedure ArtistNameOut@albumTitle varchar(20), --參數聲明@artistName varchar(20) output --輸出參數:output標識as select @artistName=ar.ArtistName from Artists arjoin Albums alon ar.ArtistId=al.AlbumIdwhere al.AlbumTitle=@albumTitleGO--執行存儲過程declare @returnName varchar(20)exec ArtistNameOut 'Worlds',@returnName output -- 參數傳入select @returnName
調用存儲過程時需要再聲明一個變量,作為output參數
關于調用存儲過程傳遞參數過程中遇到的錯誤,貼個圖記錄一下:
多個參數,參數傳遞方式必須統一
新聞熱點
疑難解答