若是你接觸過其餘的編程語言,那麼就好理解了,存儲過程就像是方法同樣。sql
居然他是方法那麼他就有相似的方法名,方法要傳遞的變量和返回結果,因此存儲過程有存儲過程名有存儲過程參數也有返回值。 數據庫
存儲過程的優勢: 編程
存儲過程能夠分爲系統存儲過程、擴展存儲過程和用戶自定義的存儲過程安全
咱們先來看一下系統存儲過程,系統存儲過程由系統定義,主要存放在MASTER數據庫中,名稱以"SP"開頭或以"XP"開頭。儘管這些系統存儲過程在MASTER數據庫中,服務器
但咱們在其餘數據庫仍是能夠調用系統存儲過程。有一些系統存儲過程會在建立新的數據庫的時候被自動建立在當前數據庫中。網絡
經常使用系統存儲過程有:編程語言
在建立一個存儲過程前,先來講一下存儲過程的命名,看到好幾篇講存儲過程的文章都喜歡在建立存儲過程的時候加一個前綴,養成在存儲過程名前加前綴的習慣很重要,雖然這只是一件很小的事情,可是每每小細節決定大成敗。看到有的人喜歡這樣加前綴,例如proc_名字。也看到這加樣前綴usp_名字。前一種proc是procedure的簡寫,後一種sup意思是user procedure。我比較喜歡第一種,那麼下面全部的存儲過程名都以第一種來寫。至於名字的寫法採用駱駝命名法。性能
建立存儲過程的語法以下:優化
CREATE PROC[EDURE] 存儲過程名 @參數1 [數據類型]=[默認值] [OUTPUT] @參數2 [數據類型]=[默認值] [OUTPUT] AS SQL語句 EXEC 過程名[參數]
create procedure proc_select_officeinfo--(存儲過程名) as select Id,Name from Office_Info--(sql語句) exec proc_select_officeinfo--(調用存儲過程)
create procedure procedure_proc_GetoffinfoById --(存儲過程名) @Id int--(參數名 參數類型) as select Name from dbo.Office_Info where Id=@Id--(sql語句) exec procedure_proc_GetoffinfoById 2--(存儲過程名稱以後,空格加上參數,多個參數中間以逗號分隔)
注:參數賦值是,第一個參數能夠不寫參數名稱,後面傳入參數,須要明確傳入的是哪一個參數名稱
create procedure proc_office_info--(存儲過程名)
@Id int,@Name varchar(20) output--(參數名 參數類型)傳出參數要加上output
as
begin
select @Name=Name from dbo.Office_Info where Id=@Id --(sql語句)
endspa
declare @houseName varchar(20) --聲明一個變量,獲取存儲過程傳出來的值
exec proc_office_info--(存儲過程名)
4,@houseName output--(傳說參數要加output 這邊若是用@變量 = OUTPUT會報錯,因此換一種寫法)
select @houseName--(顯示值)
4.帶返回值的
create procedure proc_office_info--(存儲過程名) @Id int--(參數名 參數類型) as begin if(select Name from dbo.Office_Info where Id=@Id)=null --(sql語句) begin return -1 end else begin return 1 end end declare @house varchar(20) --聲明一個變量,獲取存儲過程傳出來的值 exec @house=proc_office_info 2 --(調用存儲過程,用變量接收返回值) --注:帶返回值的存儲過程只能爲int類型的返回值 print @house