存储过程参数案例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

IF (@writtenAvg>70 AND @labAvg>70)

print'本班考试成绩:优秀' /*显示考试成绩的等级*/
ELSE

print'本班考试成绩:较差'
print'------------------------------------------------'
print'参加本次考试没有通过的学员:'

OR LabExam<60
创建带参数的存储过程2-1
存储过程的参数分两种:
输入参数 输出参数
输入参数:用于向存储过程传入值,类似C语言的按值 传递;
输出参数:用于在调用存储过程后,返回结果,类似C 语言的按引用传递;
带输入参数的存储过程3-1
通过参数名传递值
用@parameter=value格式在EXEC语句

OR labExam<@labPass
带输入参数的存储过程3-5
调用带参数的存储过程 假定本次考试机试偏难,机试的及格线定为55
分,笔试及格线定为60分 调用过程 EXEC proc_stu1 60,55 --或这样调用: EXEC proc_stu1 @labPass=55,@writtenPass=60
中指定
参数称为通过参数名传递值.在通过参数名传递值时,
参数可以以任何顺序指定,可以忽略允许空值和有默认
的参数存在时(相当于覆盖了).
带输入参数的存储过程3-2
在以下情况下使用存储过程中定义的默认参数值: 在执行存储过程时没有给参数指定值. 指定default关键字作为参数的值.
带输入参数的存储过程3-3
SELECT stuName,stuInfo.stuNo,writtenExam,LabExam
From stuInfo
/*查询没有通过考试的学员*/

源自文库
INNER JOIN stuMarks ON

stuInfo.stuNo=stuMarks.stuNo

WHERE writtenExam<60
输入参数的默认值4-2
CREATE PROCEDURE proc_stu2
@writtenPass int=60, /*笔试及格线:默认为60分*/
@labPass int=60 /*机试及格线:默认为60分*/
AS
print '--------------------------------------------------'
问题: 修改上例:由于每次考试的难易程度不一样,每次 笔试
和机试的及格线可能随时变化(不再是60分),这导致考 试的评判结果也相应变化。 分析: 在述存储过程添加2个输入参数: @writtenPass 笔试及格线 @labPass 机试及格线
带输入参数的存储过程3-4
CREATE PROCEDURE proc_stu1
输入参数的默认值4-1
带参数的存储过程确实比较方便,调用者可根据 试卷的难易度,随时修改每次考试的及格线.
问题: 如果试卷的难易程度合适,则调用者还是必须如
此调用: EXEC proc_stu 60,60,比较麻烦,这样 调用就比较合理: EXEC proc_stu1 55-笔试及格线55分,机试及格线默认为60分 EXEC proc_stu1-笔试和机试及格线都默认为标准的60分

WHERE writtenExam<@writtenPass

OR LabExam<@labPass
输入参数的默认值4-3
调用带参数默认值的存储过程 EXEC proc_stu2 --都采用默认值 EXEC proc_stu2 64 --机试采用默认值 EXEC proc_stu2 60,55 --都不采用默认值
SELECT stuName, stuInfo.stuNo, writtenExam,
labExam

From stuInfo /*查询没有通过考试的学员*/

INNER JOIN stuMarks ON

stuInfo.stuNo=stuMarks.stuNo

WHERE writtenExam<@writtenPass
--错误的调用方式:希望笔试采用默认值,机试及格线55 分
EXEC proc_stu2 ,55
输入参数的默认值4-4
--正确的调用方式: EXEC proc_stu2 @labPass=55
使用输入参数执行存储过程
通过定位传递参数 只进行值的传递(没有引用传递参数)称为通过定位传递 参数.当只指定一个值时,列出参数值在CREATE PROCEDURE 语句中定义的顺序.在通过定位传递参数时, 可以忽略默认存在的参数,但是不可破坏次序.
@writtenPass int, /*输入参数:笔试及格线*/
@labPass int /*输入参数:机试及格线*/
AS print '--------------------------------------------------'
print ' 参加本次考试没有通过的学员:'
存储过程参数案例
创建不带参数的存储过程1-1
问题:请创建存储过程,查看本次考试平均分以及未通 过考试的学员名单
创建不带参数的存储过程1-2
CREATE PROCEDURE proc_stu
AS
DECLARE @writtenAvg float,@labAvg float /*笔试平均分和机试平均分变量 */
SELECT @writtenAvg=AVG(writtenExam),

@labAvg=AVG(labExam) FROM stuMarks
print '笔试平均分:'+convert(varchar(5),@writtenAvg)
print '机试平均分:'+convert(varchar(5),@labAvg)
print ' 参加本次考试没有通过的学员:'
S
E
L
E
C
T
stuName,stuInfo.stuNo,writtenExam,LabExam
FROM stuInfo
INNER JOIN stuMarks ON /*查询没有通过考试的学员*/

stuInfo.stuNo=stuMarks.stuNo
相关文档
最新文档