文档详情

带输入参数存储过程.ppt

发布:2015-09-14约1.98千字共11页下载文档
文本预览下载声明
带输入参数存储过程 创建带参数的存储过程 存储过程的参数分两种: 输入参数 输出参数 输入参数:用于向存储过程传入值,类似C语言的按值传递; 输出参数:用于在调用存储过程后,返回结果,类似C语言的按引用传递; 带输入参数的存储过程 通过参数名传递值   用@parameter=value格式在EXEC语句   中指定参数,称为通过参数名传递值,在通过参数名传递值时,参数可以以任何顺序指定,可以忽略,允许空值和有默认的参数存在。 带输入参数的存储过程 在以下情况下使用存储过程中定义的默认参数值: 在执行存储过程时没有给参数指定值. 指定default关键字作为参数的值. 带输入参数的存储过程 问题:请创建存储过程,查看本次考试平均分以及未通过考试的学员名单。(由于每次考试的难易程度不一样,每次 笔试和机试的及格线可能随时变化(不再是60分),这导致考试的评判结果也相应变化。) 分析: 在述存储过程添加2个输入参数: @writtenPass 笔试及格线 @labPass 机试及格线 带输入参数的存储过程 CREATE PROCEDURE proc_stu1 @writtenPass int, /*输入参数:笔试及格线*/ @labPass int /*输入参数:机试及格线*/ AS print 参加本次考试没有通过的学员: SELECT stuName, stuInfo.stuNo, writtenExam, labExam From stuInfo /*查询没有通过考试的学员*/ INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo WHERE writtenExam@writtenPass OR labExam@labPass 带输入参数的存储过程 调用带参数的存储过程   假定本次考试机试偏难,机试的及格线定为55分,笔试及格线定为60分 调用过程 EXEC proc_stu1 60,55 --或这样调用: EXEC proc_stu1 @labPass=55,@writtenPass=60   输入参数的默认值 带参数的存储过程确实比较方便,调用者可根据试卷的难易度,随时修改每次考试的及格线. 问题: 如果试卷的难易程度合适,则调用者还是必须如此调用: EXEC proc_stu 60,60,比较麻烦,这样调用就比较合理: EXEC proc_stu1 55-笔试及格线55分,机试及格线默认为60分 EXEC proc_stu1-笔试和机试及格线都默认为标准的60分 输入参数的默认值 CREATE PROCEDURE proc_stu2 @writtenPass int=60, /*笔试及格线:默认为60分*/ @labPass int=60 /*机试及格线:默认为60分*/ AS print 参加本次考试没有通过的学员: SELECT stuName,stuInfo.stuNo,writtenExam,LabExam FROM stuInfo INNER JOIN stuMarks ON /*查询没有通过考试的学员*/ stuInfo.stuNo=stuMarks.stuNo WHERE writtenExam@writtenPass OR LabExam@labPass 输入参数的默认值 调用带参数默认值的存储过程 EXEC proc_stu2 --都采用默认值 EXEC proc_stu2 64 --机试采用默认值 EXEC proc_stu2 60,55 --都不采用默认值 --错误的调用方式:希望笔试采用默认值,机试及格线55分 EXEC proc_stu2 ,55 --正确的调用方式: EXEC proc_stu2 @labPass=55 使用输入参数执行存储过程 通过定位传递参数  只进行值的传递(没有引用传递参数)称为通过定位传递参数,当只指定一个值时,列出参数值在CREATE PROCEDURE 语句中定义的顺序,在通过定位传递参数时,可以忽略默认存在的参数,但是不可破坏次序。   Page ? * Page ? *
显示全部
相似文档