什么是存儲過程
對於有編程基礎的小伙伴,存儲過程應該是比較好理解的。
可以把它類比為“函數”,因為它本質上就是將一段SQL代碼封裝起來,用於完成特定的操作,在使用時只需通過儲存過程的名稱調用即可(如果存儲過程需要參數的話還需要傳遞對應的參數)
存儲過程在創建時即在數據庫服務器上進行了編譯並存儲在數據庫中,它里面的語句只進行一次編譯。(理論上來說存儲過程可以提高SQL語句的執行效率,不過在實際使用時我暫時沒有感知到明顯的速度提升)
存儲過程可以分為:系統存儲過程、用戶存儲過程、擴展存儲過程;本文主要介紹用戶存儲過程。
存儲過程的語法格式
以SQL server為例,先給出最基本的,創建無參存儲過程的語法骨架:
這里需要提示一下:create procedure 只能是批處理的第一條語句,而且只能在一個批處理中創建並編譯。
無參無返回值存儲過程
1 Create procedure 存儲過程名稱 2 As 3 Begin 4 SQL語句 5 End 6 7 /* 調用方法 */ 8 Exec 存儲過程名稱
帶參數的存儲過程:
1 Create procedure 存儲過程名稱 2 3 (@variate01 int, @variate02 int) 4 5 /* SQL中的參數名必須以@開頭,后面跟上參數的類型 6 7 這里可以簡單理解為在儲存過程中創建了臨時變量,離開存儲過程之后,這里創建的變量將被銷毀。 */ 8 9 As 10 11 Begin 12 13 SQL語句 14 15 /* 在begin和end之間可以直接使用傳入的參數 */ 16 17 End 18 19 20 21 /* 調用方法 */ 22 23 Exec 存儲過程名稱 參數(不同參數之間使用逗號隔開)
創建帶默認參數的存儲過程
1 Create procedure 存儲過程名稱 2 3 (@startId int = 默認值, @endId int = 默認值) 4 5 Begin 6 7 SQL語句 8 9 End 10 11 12 13 14 15 /* 調用方法 16 17 傳入參數,就使用傳入的參數;如果不傳入參數則使用默認參數 */ 18 19 Exec 存儲過程名稱
創建帶返回值的存儲過程
1 Create procedure 存儲過程名稱 2 3 (@variate01 int out,@variate02 int output) 4 5 /* 需要返回的參數在定義時,后面加上out ; 需要輸入輸出的參數在定義時,后面加上output */ 6 7 As 8 9 Begin 10 11 SQL語句 12 13 End 14 15 16 17 /* 調用方法 18 19 在使用前,先定義好變量用來承接存儲過程的返回值*/ 20 21 Declare @variate01 int, 22 @variate02 int, 23 24 exec 存儲過程名稱 @variate01 out, @variate02 output; 25 select @variate01, @variate02;
其他存儲過程的語法格式可以參考 W3Cschool的文章,我就不畫蛇添足了。
https://www.w3cschool.cn/sqlserver/sqlserver-hw2328n6.html
