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