定义存储过程的语法
CREATE PROC[EDURE] 存储过程名
@参数1 数据类型 = 默认值 OUTPUT,
… … ,
@参数n 数据类型 = 默认值 OUTPUT
AS
SQL语句
GO
存储过程的参数
和其他编程语言的方法一样,参数可选
参数分为输入参数、输出参数
输入参数允许有默认值
例如 创建存储过程,查询Java Logic最近一次考试平均分以及未通过考试的学员名单
以下为存储过程定义
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'usp_GetAverageResult' ) --检测是否存在
DROP PROCEDURE usp_GetAverageResult
GO
CREATE PROCEDURE usp_GetAverageResult --创建存储过程
AS
DECLARE @subjectNo int --课程编号
DECLARE @date datetime --最近考试时间
SELECT @subjectNo=subjectNo FROM Subject WHERE SubjectName='java logic'
SELECT @date=max(ExamDate) FROM Result INNER JOIN Subject
ON Result.SubjectNo=Subject.SubjectNo
WHERE Result.SubjectNo=@subjectNo
DECLARE @avg decimal(18,2) --平均分变量
SELECT @avg=AVG(StudentResult)
FROM Result WHERE ExamDate=@date and SubjectNo=@subjectNo
PRINT '平均分:'+CONVERT(varchar(5),@avg)
IF (@avg>70)
PRINT '考试成绩:优秀'
ELSE
PRINT '考试成绩:较差'
PRINT '--------------------------------------------------'
PRINT '参加本次考试没有通过的学员:'
SELECT StudentName,Student.StudentNo,StudentResult FROM Student
INNER JOIN Result ON Student.StudentNo=Result.StudentNo
WHERE StudentResult<60 AND ExamDate=@date and SubjectNo=@subjectNo
GO
GO
调用存储过程
EXEC usp_GetAverageResult