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 createprocedure 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