SQL教学课程存储过程市公开课金奖市赛课一等奖课件_第1页
SQL教学课程存储过程市公开课金奖市赛课一等奖课件_第2页
SQL教学课程存储过程市公开课金奖市赛课一等奖课件_第3页
SQL教学课程存储过程市公开课金奖市赛课一等奖课件_第4页
SQL教学课程存储过程市公开课金奖市赛课一等奖课件_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、第六章存放过程第1页回顾事务含有ACID四个属性,它们是?管理控制事务惯用T-SQL语句有哪些?索引分为哪几类?依据您了解,什么是视图?它有什么好处?您在stuInfo表中创建了主键列stuNo, SQL Server将自动创建哪些索引?第2页本章目标了解存放过程优点掌握惯用系统存放过程掌握怎样创建存放过程掌握怎样调用存放过程第3页存放过程(procedure)类似于C语言中函数用来执行管理任务或应用复杂业务规则存放过程能够带参数,也能够返回结果int sum(int a,int b) int s; s =a+b; return s ;存放过程相当于C语言中函数什么是存放过程 2-1第4页存放

2、过程-单个 SELECT 语句SELECT 语句块SELECT语句与逻辑控制语句能够包含什么是存放过程 2-2存放过程能够包含数据操纵语句、变量、逻辑 控制语句等第5页系统存放过程由系统定义,存放在master数据库中类似C语言中系统函数系统存放过程名称都以“sp_”开头或”xp_”开头返回0(成功),1(失败)用户自定义存放过程由用户在自己数据库中创建存放过程类似C语言中用户自定义函数存放过程分类 第6页惯用系统存放过程 4-1系统存放过程说明sp_databases列出服务器上全部数据库。sp_helpdb汇报相关指定数据库或全部数据库信息sp_renamedbsp_rename更改数据库

3、名称在当前数据库中更改用户创建对象名称。sp_tables返回当前环境下可查询对象列表sp_columns回某个表列信息sp_help查看某个表全部信息sp_helpconstraint查看某个表约束sp_helpindex查看某个表索引sp_stored_procedures列出当前环境中全部存放过程。sp_password添加或修改登录帐户密码。sp_helptext显示默认值、未加密存放过程、用户定义存放过程、触发器或视图实际文本。第7页EXEC sp_databasesEXEC sp_renamedb Northwind,Northwind1USE stuDBGOEXEC sp_tab

4、lesEXEC sp_columns stuInfo EXEC sp_help stuInfoEXEC sp_helpconstraint stuInfoEXEC sp_helpindex stuMarksEXEC sp_helptext view_stuInfo_stuMarks EXEC sp_stored_procedures 惯用系统存放过程 4-2修改数据库名称(单用户访问)列出当前系统中数据库当前数据库中查询对象列表返回某个表列信息查看表stuInfo信息查看表stuInfo约束查看表stuMarks索引查看视图语句文本查看当前数据库中存放过程演示:惯用存放过程第8页惯用扩展存放过

5、程:xp_cmdshell 能够执行DOS命令下一些操作 以文本行方式返回任何输出 调用语法: EXEC xp_cmdshell DOS命令 NO_OUTPUT惯用系统存放过程 4-3第9页惯用系统存放过程 4-4USE masterGOEXEC xp_cmdshell mkdir d:bank, NO_OUTPUTIF EXISTS(SELECT * FROM sysdatabases WHERE name=bankDB) DROP DATABASE bankDBGOCREATE DATABASE bankDB ( )GOEXEC xp_cmdshell dir D:bank -查看文件创建

6、数据库bankDB,要求保留在D:bank创建文件夹D:bank查看文件夹D:bank第10页定义存放过程语法 CREATE PROCEDURE 存放过程名 参数1 数据类型 = 默认值 OUTPUT, , 参数n 数据类型 = 默认值 OUTPUT AS SQL语句 GO和C语言函数一样,参数可选参数分为输入参数、输出参数 输入参数允许有默认值怎样创建存放过程第11页创建不带参数存放过程 2-1问题:请创建存放过程,查看此次考试平均分以及未经过考试学员名单第12页创建不带参数存放过程 2-2CREATE PROCEDURE proc_stu AS DECLARE writtenAvg flo

7、at,labAvg float SELECT writtenAvg=AVG(writtenExam), labAvg=AVG(labExam) FROM stuMarks print 笔试平均分:+convert(varchar(5),writtenAvg) print 机试平均分:+convert(varchar(5),labAvg) IF (writtenAvg70 AND labAvg70) print 本班考试成绩:优异 ELSE print 本班考试成绩:较差 print - print 参加此次考试没有经过学员: SELECT stuName,stuInfo.stuNo,writt

8、enExam,labExam FROM stuInfo INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo WHERE writtenExam60 OR labExam60 GOproc_stu为存放过程名称笔试平均分和机试平均分变量 显示考试成绩等级 显示未经过学员 第13页EXECUTE(执行)语句用来调用存放过程调用语法EXEC 过程名 参数调用存放过程EXEC proc_stu第14页创建带参数存放过程存放过程参数分两种:输入参数输出参数int sum (int a, int b) int s; s=a+b; return s;c=s

9、um(5, 8)传入参数值输入参数: 用于向存放过程传入值,类似C语言按值传递; 输出参数: 用于在调用存放过程后, 返回结果,类似C语言 按引用传递; 返回结果第15页带输入参数存放过程3-1问题:修改上例:因为每次考试难易程度不一样,每次 笔试和机试及格线可能随时改变(不再是60分),这造成考试评判结果也对应改变。分析:在述存放过程添加2个输入参数:writtenPass 笔试及格线 labPass 机试及格线 第16页带输入参数存放过程3-2CREATE PROCEDURE proc_stu writtenPass int, labPass int AS print - print 参加

10、此次考试没有经过学员: SELECT stuName,stuInfo.stuNo,writtenExam, labExam FROM stuInfo INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo WHERE writtenExamwrittenPass OR labExamlabPass GO输入参数:笔试及格线输入参数:机试及格线查询没有经过考试学员第17页带输入参数存放过程3-3EXEC proc_stu 60,55 调用带参数存放过程 假定此次考试机试偏难,机试及格线定为55分,笔试及格线定为60分-或这么调用:EXEC proc

11、_stu labPass=55,writtenPass=60机试及格线降分后,李斯文(59分)成为“漏网之鱼”了第18页输入参数默认值3-1带参数存放过程确实比较方便,调用者可依据试卷难易度,随时修改每次考试及格线问题:假如试卷难易程度适当,则调用者还是必须如此调用: EXEC proc_stu 60,60,比较麻烦这么调用就比较合理:EXEC proc_stu 55EXEC proc_stu 笔试及格线55分,机试及格线默认为60分 笔试和机试及格线都默认为标准60分第19页CREATE PROCEDURE proc_stu writtenPass int=60, labPass int=6

12、0 AS print - print 参加此次考试没有经过学员: SELECT stuName,stuInfo.stuNo,writtenExam, labExam FROM stuInfo INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo WHERE writtenExamwrittenPass OR labExamlabPass GO笔试及格线:默认为60分机试及格线:默认为60分查询没有经过考试学员输入参数默认值3-2第20页输入参数默认值3-3EXEC proc_stu -都采取默认值 EXEC proc_stu 64 -机试采取默

13、认值 EXEC proc_stu 60,55 -都不采取默认值 调用带参数默认值存放过程-错误调用方式:希望笔试采取默认值,机试及格线55分EXEC proc_stu ,55 -正确调用方式:EXEC proc_stu labPass=55 第21页带输出参数存放过程 3-1假如希望调用存放过程后,返回一个或多个值,这时就需要使用输出(OUTPUT)参数了 问题:修改上例,返回未经过考试学员人数。第22页CREATE PROCEDURE proc_stu notpassSum int OUTPUT, writtenPass int=60, labPass int=60 AS SELECT st

14、uName,stuInfo.stuNo,writtenExam, labExam FROM stuInfo INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo WHERE writtenExamwrittenPass OR labExamlabPass SELECT notpassSum=COUNT(stuNo) FROM stuMarks WHERE writtenExamwrittenPass OR labExam=3 print 未经过人数:+convert(varchar(5),sum)+ 人, 超出60%,及格分数线还应下调ELSE

15、 print 未经过人数:+convert(varchar(5),sum)+ 人, 已控制在60%以下,及格分数线适中GO 调用带输出参数存放过程带输出参数存放过程 3-3调用时必须带OUTPUT关键字 ,返回结果将存放在变量sum中 后续语句引用返回结果第24页能够使用PRINT语句显示错误信息,但这 些信息是暂时,只能显示给用户 RAISERROR 显示用户定义错误信息时可指定严重级别,设置系统变量ERROR统计所发生错误等处理存放过程中错误 第25页使用RAISERROR 语句4-1RAISERROR (msg_id | msg_str,severity, state WITH opti

16、on,.n) RAISERROR语句使用方法以下: msg_id:在sysmessages系统表中指定用户定义错误信息msg_str:用户定义特定信息,最长255个字符severity:定义严重性级别。用户可使用级别为018级state:表示错误状态,1至127之间值option:指示是否将错误统计到服务器错误日志中 第26页问题:完善上例,当用户调用存放过程时,传入及格线参数不在0100之间时,将弹犯错误警告,终止存放过程执行。 使用RAISERROR 语句4-2第27页CREATE PROCEDURE proc_stu notpassSum int OUTPUT, -输出参数 writte

17、nPass int=60, -默认参数放后 labPass int=60 -默认参数放后 AS IF (NOT writtenPass BETWEEN 0 AND 100) OR (NOT labPass BETWEEN 0 AND 100) BEGIN RAISERROR (及格线错误,请指定0100之间分 数,统计中止退出,16,1) RETURN -马上返回,退出存放过程 END .其它语句同上例,略GO 错误处理引发系统错误,指定错误严重级别16,调用状态为1(默认),并影响ERROR系统变量值 使用RAISERROR 语句4-3第28页使用RAISERROR 语句4-4/*-调用存放过程,测试RAISERROR语句-*/DECLARE sum int, t intEXEC proc_stu sum OUTPUT ,604 SET t=ERROR print 错误号:+convert(varchar(5),t )IF t0 RETURN -退出批处理,后续语句不再执行print -IF sum=3 print 未经过人数:+convert(varchar(5),sum)+ 人,超出60%,及格分数线还应下调ELSE print 未经过人数:+convert(varchar(5),sum)+ 人,已控制在60

温馨提示

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

最新文档

评论

0/150

提交评论