定義:
一組預編譯的SQL語句,它可以包含數據操縱語句、變量、邏輯控制語句等。
優點:
1、執行速度更快
2、允許模塊化程序設計
3、提高系統安全性
4、減少網絡流通量
創建和調用存儲過程
數據庫結構如下:
SELECT TOP 1000 [id]
,[writtenExam]
,[labExam]
,[stuName]
,[stuNo]
FROM [pubs].[dbo].[StuInfo]
內容如下:
一、不帶參數的存儲過程
Create procedure [dbo].[pro_StuInfo]
as
declare @writtenAvg float,@labAvg float --用到輸出的變量
begin
select @writtenAvg = AVG(writtenExam),@labAvg=AVG(labExam) from StuInfo
print '筆試平均分:'+ convert(nvarchar(50),@writtenavg)
print '機試平均分:'+ convert(nvarchar(50),@labAvg)
end
--執行存儲過程
EXEC pro_StuInfo
--結果
筆試平均分:65
機試平均分:55
二、帶參數的存儲過程
Create procedure pro_StuInfo1
@writtenAvg float = 50,@labAvg float = 50 --參數變量
as
begin
print '及格的學生如下:'
select * from StuInfo where writtenExam >= @writtenAvg and labExam >= @labAvg
end
go
--默認執行
EXEC pro_StuInfo1
--修改參數執行
EXEC pro_StuInfo1 60,70
--指定參數值
EXEC pro_StuInfo1 @labAvg=60
三、帶輸出參數
Create procedure pro_StuInfo2
@outpasscount int output,
@writtenAvg float = 50,@labAvg float = 50
as
begin
select @outpasscount = COUNT(*) from StuInfo where writtenExam >= @writtenAvg and labExam >= @labAvg
end
go
--執行存儲過程
DECLARE @outpasscount int
EXEC pro_StuInfo2 @outpasscount OUTPUT
PRINT '及格的學生數爲:' + convert(nvarchar(50),@outpasscount)
--執行結果如下:
及格的學生數爲:3