单元8存储过程解析.ppt

单元8存储过程解析

指导——存储过程获指定学期课程数2-1 训练要点: 使用输入、输出参数的存储过程完成数据查询,获得相关数据 需求说明: 查询获得指定学期开设的课程数和总课时 如果学期名称为空,则显示“学期名称不能为空”,并返回 讲解需求说明 指导——存储过程获指定学期课程数2-2 实现思路: 输入参数是学期名称 输出参数是课程数和总课时数 查询获得指定学期所开设的课程、课时 查询该学期的总课程数、总课时数 完成时间:20分钟 CREATE PROCEDURE usp_query_subject @CourseNum INT OUTPUT, @HourNum INT OUTPUT, @GradeName VARCHAR(50) AS IF LEN(@GradeName) = 0 BEGIN PRINT 学期名称不能为空 RETURN END PRINT ---------学期课程信息如下------------ SELECT GradeName,SubjectName,ClassHour FROM Grade LEFT JOIN Subject ON Grade.GradeId=Subject.GradeId WHERE GradeName=@GradeName SELECT @CourseNum=COUNT(0), @HourNum=SUM(ClassHour) FROM Grade INNER JOIN Subject ON Grade.GradeId=Subject.GradeId WHERE GradeName=@GradeName GO 共性问题讲解 常见调试问题及解决办法 代码规范问题 共性问题集中讲解 常见错误 CREATE PROCEDURE usp_query_subject @CourseNum INT OUTPUT, @GradeName VARCHAR(50) AS … … GO EXEC usp_query_subject @GradeName= S1, @CourseNum OUTPUT GO 存储过程的调用语句中数据类型和参数位置要匹配 EXEC usp_query_subject @CourseNum OUTPUT,@GradeName=S1 , 存储过程最后一个参数后不能有逗号 DECLARE @CourseNum INT DECLARE @GradeName varchar(50) 没有声明变量 处理存储过程中的错误 使用PRINT语句显示错误信息 错误信息是临时的,只能显示给用户 RAISERROR 显示用户定义的错误信息时 可指定严重级别 设置系统变量@@ERROR 记录所发生的错误等 使用RAISERROR 语句 RAISERROR (msg_id | msg_str,severity, state WITH option[, ... n]]) RAISERROR语句的用法如下: msg_id:在sysmessages系统表中指定用户定义错误信息 msg_str:用户定义的特定信息,最长255个字符 severity:定义严重性级别。用户可使用的级别为0–18级 state:表示错误的状态,1至127之间的值 option:指示是否将错误记录到服务器错误日志中 完善上例。调用存储过程时,如果传入的及格线参数不 在0~100之间时,将弹出错误警告,终止存储过程的执行 使用RAISERROR 示例2-1 CREATE PROCEDURE usp_stu @UnPassNum OUTPUT, @SubjectName NCHAR(10), @Pass int = 60 AS IF (NOT @Pass BETWEEN 0 AND 100) --判断及格线是否不在取值范围内 BEGIN RAISERROR (及格线错误,请指定-之间的分数,统计中断退出,16,1) RETURN END … … GO 错误处理 RAISERROR()引发系统错误,指定错误的严重级别16,调用状态为1(默认),并影响@@ERROR系统变量的值 立即返回,退出存储过程 演示案例6:创建有错误处理的存储过程 使用RAISERROR示例2-2 /*---调用存储过程,测试RAISERROR语句----*/ DECLARE @UnPassNum int EXEC usp_stu @UnPassNum OUTPUT,Java logic,109

文档评论(0)

1亿VIP精品文档

相关文档