sql_server_2005_存储过程_第1页
sql_server_2005_存储过程_第2页
sql_server_2005_存储过程_第3页
sql_server_2005_存储过程_第4页
sql_server_2005_存储过程_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

存储过程 procedure 类似于C语言中的函数用来执行管理任务或应用复杂的业务规则存储过程可以带参数 也可以返回结果 intsum inta intb ints s a b returns 存储过程相当于C语言中的函数 什么是存储过程 存储过程的分类 系统存储过程由系统定义 存放在master数据库中类似C语言中的系统函数系统存储过程的名称都以 sp 开头或 xp 开头用户自定义存储过程由用户在自己的数据库中创建的存储过程类似C语言中的用户自定义函数 常用的系统存储过程 EXECsp databasesEXECsp renamedb Northwind Northwind1 USEstuDBGOEXECsp tablesEXECsp columnsstuInfoEXECsp helpstuInfoEXECsp helpconstraintstuInfoEXECsp helpindexstuMarksEXECsp helptext view stuInfo stuMarks EXECsp stored procedures 常用的系统存储过程 修改数据库的名称 单用户访问 列出当前系统中的数据库 当前数据库中查询的对象的列表 返回某个表列的信息 查看表stuInfo的信息 查看表stuInfo的约束 查看表stuMarks的索引 查看视图的语句文本 查看当前数据库中的存储过程 演示 常用的存储过程 常用的系统存储过程 常用的扩展存储过程 xp cmdshell可以执行DOS命令下的一些的操作以文本行方式返回任何输出调用语法 EXECxp cmdshellDOS命令 NO OUTPUT 常用的系统存储过程 USEmasterGOEXECxp cmdshell mkdird bank NO OUTPUTIFEXISTS SELECT FROMsysdatabasesWHEREname bankDB DROPDATABASEbankDBGOCREATEDATABASEbankDB GOEXECxp cmdshell dirD bank 查看文件 创建数据库bankDB 要求保存在D bank 创建文件夹D bank 查看文件夹D bank 如何创建存储过程 定义存储过程的语法CREATEPROC EDURE 存储过程名 参数1数据类型 默认值OUTPUT 参数n数据类型 默认值OUTPUTASSQL语句GO和C语言的函数一样 参数可选参数分为输入参数 输出参数输入参数允许有默认值 创建不带参数的存储过程 问题 请创建存储过程 查看本次考试平均分以及未通过考试的学员名单 创建不带参数的存储过程 CREATEPROCEDUREproc stuASDECLARE writtenAvgfloat labAvgfloatSELECT writtenAvg AVG writtenExam labAvg AVG labExam FROMstuMarksprint 笔试平均分 convert varchar 5 writtenAvg print 机试平均分 convert varchar 5 labAvg IF writtenAvg 70AND labAvg 70 print 本班考试成绩 优秀 ELSEprint 本班考试成绩 较差 print print 参加本次考试没有通过的学员 SELECTstuName stuInfo stuNo writtenExam labExamFROMstuInfoINNERJOINstuMarksONstuInfo stuNo stuMarks stuNoWHEREwrittenExam 60ORlabExam 60GO proc stu为存储过程的名称 笔试平均分和机试平均分变量 显示考试成绩的等级 显示未通过的学员 调用存储过程 EXECUTE 执行 语句用来调用存储过程调用的语法EXEC过程名 参数 EXECproc stu 存储过程的参数分两种 输入参数输出参数输入参数 用于向存储过程传入值 类似C语言的按值传递 输出参数 用于在调用存储过程后 返回结果 类似C语言的按引用传递 intsum inta intb ints s a b returns c sum 5 8 传入参数值 返回结果 带输入参数的存储过程 问题 修改上例 由于每次考试的难易程度不一样 每次笔试和机试的及格线可能随时变化 不再是60分 这导致考试的评判结果也相应变化 分析 在述存储过程添加2个输入参数 writtenPass笔试及格线 labPass机试及格线 带输入参数的存储过程 CREATEPROCEDUREproc stu writtenPassint labPassintASprint print 参加本次考试没有通过的学员 SELECTstuName stuInfo stuNo writtenExam labExamFROMstuInfoINNERJOINstuMarksONstuInfo stuNo stuMarks stuNoWHEREwrittenExam writtenPassORlabExam labPassGO 输入参数 笔试及格线 输入参数 机试及格线 查询没有通过考试的学员 带输入参数的存储过程 EXECproc stu60 55 调用带参数的存储过程假定本次考试机试偏难 机试的及格线定为55分 笔试及格线定为60分 或这样调用 EXECproc stu labPass 55 writtenPass 60 机试及格线降分后 李斯文 59分 成为 漏网之鱼 了 输入参数的默认值 带参数的存储过程确实比较方便 调用者可根据试卷的难易度 随时修改每次考试的及格线 问题 如果试卷的难易程度合适 则调用者还是必须如此调用 EXECproc stu60 60 比较麻烦这样调用就比较合理 EXECproc stu55EXECproc stu 笔试及格线55分 机试及格线默认为60分 笔试和机试及格线都默认为标准的60分 CREATEPROCEDUREproc stu writtenPassint 60 labPassint 60ASprint print 参加本次考试没有通过的学员 SELECTstuName stuInfo stuNo writtenExam labExamFROMstuInfoINNERJOINstuMarksONstuInfo stuNo stuMarks stuNoWHEREwrittenExam writtenPassORlabExam labPassGO 笔试及格线 默认为60分 机试及格线 默认为60分 查询没有通过考试的学员 输入参数的默认值 输入参数的默认值 EXECproc stu 都采用默认值EXECproc stu64 机试采用默认值EXECproc stu60 55 都不采用默认值 调用带参数默认值的存储过程 错误的调用方式 希望笔试采用默认值 机试及格线55分EXECproc stu 55 正确的调用方式 EXECproc stu labPass 55 带输出参数的存储过程 如果希望调用存储过程后 返回一个或多个值 这时就需要使用输出 OUTPUT 参数了 问题 修改上例 返回未通过考试的学员人数 CREATEPROCEDUREproc stu notpassSumintOUTPUT writtenPassint 60 labPassint 60AS SELECTstuName stuInfo stuNo writtenExam labExamFROMstuInfoINNERJOINstuMarksONstuInfo stuNo stuMarks stuNoWHEREwrittenExam writtenPassORlabExam labPassSELECT notpassSum COUNT stuNo FROMstuMarksWHEREwrittenExam writtenPassORlabExam labPassGO 输出 返回 参数 表示没有通过的人数 推荐将默认参数放后 带输出参数的存储过程 统计并返回没有通过考试的学员人数 调用存储过程 DECLARE sumintEXECproc stu sumOUTPUT 64print IF sum 3print 未通过人数 convert varchar 5 sum 人 超过60 及格分数线还应下调 ELSEprint 未通过人数 convert varchar 5 sum 人 已控制在60 以下 及格分数线适中 GO 调用带输出参数的存储过程 带输出参数的存储过程 调用时必须带OUTPUT关键字 返回结果将存放在变量 sum中 后续语句引用返回结果 处理存储过程中的错误 可以使用PRINT语句显示错误信息 但这些信息是临时的 只能显示给用户RAISERROR显示用户定义的错误信息时可指定严重级别 设置系统变量 ERROR记录所发生的错误等 使用RAISERROR语句 RAISERROR msg id msg str severity stateWITHoption n RAISERROR语句的用法如下 msg id 在sysmessages系统表中指定用户定义错误信息msg str 用户定义的特定信息 最长255个字符severity 定义严重性级别 用户可使用的级别为0 18级state 表示错误的状态 1至127之间的值option 指示是否将错误记录到服务器错误日志中 问题 完善上例 当用户调用存储过程时 传入的及格线参数不在0 100之间时 将弹出错误警告 终止存储过程的执行 使用RAISERROR语句 CREATEPROCEDUREproc stu notpassSumintOUTPUT 输出参数 writtenPassint 60 默认参数放后 labPassint 60 默认参数放后ASIF NOT writtenPassBETWEEN0AND100 OR NOT labPassBETWEEN0AND100 BEGINRAISERROR 及格线错误 请指定0 100之间的分数 统计中断退出 16 1 RETURN 立即返回 退出存储过程END 其他语句同上例 略GO 错误处理 引发系统错误 指定错误的严重级别16 调用状态为1 默认 并影响 ERROR系统变量的值 使用RAISERROR语句 使用RAISERROR语句 调用存储过程 测试RAISERROR语句 DECLARE sumint tintEXECproc stu sumOUTPUT 604SET t ERRORpr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论