存储过程(procedure)类似于C语言中的函数
用来执行管理任务或应用复杂的业务规则
存储过程可以带参数,也可以返回结果
存储过程的优点
执行速度更快
允许模块化程序设计
提高系统安全性
减少网络流通量
--定义存储过程的语法 CREATE PROC[EDURE] 存储过程名 @参数1 数据类型 = 默认值 OUTPUT, …… , @参数n 数据类型 = 默认值 OUTPUT AS SQL语句 GO
存储过程例子 输入参数
CREATE PROCEDURE proc_stu AS DECLARE @writtenAvg float,@labAvg numeric(6,2) SELECT @writtenAvg=AVG(written), @labAvg=AVG(lab) FROM Exam print '笔试平均分:'+convert(varchar(6),@writtenAvg) print '机试平均分:'+convert(varchar(6),@labAvg) IF (@writtenAvg>70 AND @labAvg>70) print '本校考试成绩:优秀' ELSE print '本校考试成绩:较差' print '--------------------------------------------------' print ' 参加本次考试没有通过的学员:' SELECT stuName,stuInfo.stuNo,written,lab FROM stuInfo INNER JOIN exam ON stuInfo.stuNo=exam.stuNo WHERE written<60 OR lab<60 GO
EXEC proc_stu 60,55
--或这样调用:
EXEC proc_stu @labPass=55,@writtenPass=60
EXECUTE(执行)语句用来调用存储过程 调用的语法
EXEC 过程名 [参数]
存储过程的参数分两种:
输入参数 输出参数
输入参数: 用于向存储过程传入值,类似C语言的按值传递;
输出参数: 用于在调用存储过程后, 返回结果,类似C语言的 按引用传递;
例子输出参数
CREATE PROCEDURE proc_stu @notpassSum int OUTPUT, @writtenPass int=60, @labPass int=60 AS print '--------------------------------------------------' print ' 参加本次考试没有通过的学员:' SELECT stuName,stuInfo.stuNo,written,lab FROM stuInfo INNER JOIN Exam ON stuInfo.stuNo=exam.stuNo WHERE written<@writtenPass OR lab<@labPass SELECT @notpassSum=COUNT(stuNo) FROM Exam WHERE written<@writtenPass OR lab<@labPass GO
调用输出参数
/*---调用存储过程----*/ DECLARE @sum int EXEC proc_stu @sum OUTPUT ,64 print '--------------------------------------------------' IF @sum>=3 print '未通过人数:'+convert(varchar(5),@sum)+ '人, 超过%,及格分数线还应下调' ELSE print '未通过人数:'+convert(varchar(5),@sum)+ '人, 已控制在%以下,及格分数线适中' GO
修改存储过程
ALTER PROCEDURE proc_stu …
删除存储过程
DROP PROCEDURE proc_stu