1. 程式人生 > 實用技巧 >sqlserver的儲存過程

sqlserver的儲存過程

一、儲存過程概念

儲存過程時一系列T-sql的集合,除了能進行正常的增刪改查,還有邏輯控制,並可以設定輸入、輸出引數,返回值,可以接受多個結果集。

儲存過程的優點:

1、執行速度快

  儲存過程是一系列T-sql經過編譯後儲存的資料庫中,相比於多條sql每次編譯執行,能直接提升資料庫中的執行速度。

  其次,對儲存過程的的呼叫只是呼叫一次名稱,同樣可以減少網路通訊耗時,並減少網路通道的佔用。

2、便於修改

  如果不修改儲存過程的名稱和引數,修改儲存過程的邏輯,並不會導致程式碼呼叫失敗。專案原始碼無需更改。

3、保證資料安全

  通過許可權的設定,讓某些使用者通過儲存過程來呼叫使用者無法操作的資料,保證資料安全。

二、儲存過程語法

CREATE PROC procedure_name [ ; number ]
  [ { @parameter data_type } [ = default ] [ OUTPUT ]]

  [ ,...n ]

[ WITH [RECOMPILE] [ENCRYPTION] ]

AS
begin

end

引數介紹:

procedure_name  :儲存過程名稱,不能現有的資料庫物件衝突,如表名、儲存過程名等

;number  :一個整數值,表示同一個儲存過程名下的分組,如:procedure_name;1 procedure_name;2 procedure_name;3可以通過名稱刪除一組儲存過程。

@parameter  :引數名,必須加@

data_type  :引數型別

=default  :預設值

output  :輸出引數標識,加上之後就代表是輸出引數

recompile  :不會快取該改儲存過程,在執行時,重新編譯

encryption  :加密

as  :之後的儲存過程的的邏輯,begin開始end結束。

儲存過程例項:

use custom
go
if exists (select * from sys.objects where name='get_emp_count')
begin
drop procedure get_emp_count
end
go

create
procedure dbo.get_emp_count @age int, @count int output as begin --為on時結果中不返回受影響的行數,提高查詢效率,只在改批處理域中生效。 set nocount on; select @count=count(*) from emp where age=@age select * from emp end go

create procedure語句必須是批處理的第一句,所以必須加go。

呼叫:

--測試
declare @result_count int
--呼叫帶返回引數的儲存過程時,引數後面要加output
--execute get_emp_count @age=22,@count=@result_count output
execute get_emp_count 22,@result_count output
--select @result_count as count
select count=@result_count

--列印該變數
print @result_count
go