定义:
一组预编译的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