欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    完整word版SQL存储过程学习总结.docx

    • 资源ID:2247080       资源大小:188.81KB        全文页数:45页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    完整word版SQL存储过程学习总结.docx

    1、完整word版SQL存储过程学习总结select*from 成绩表select*from 学生信息表1 存储过程的定义 存储过程(procedure)类似于C语言中的函数 用来执行管理任务或应用复杂的业务规则 存储过程可以带参数,也可以返回结果 存储过程可以包含数据操纵语句、变量、逻辑 控制语句等 2 存储过程的优点 执行速度更快存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 允许模块化程序设计当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delet

    2、e时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。可以极大的提高数据 库的使用效率,减少程序的执行时间,这一点在较大数据量的数据库的操作中是非常重要的。 提高系统安全性可设定只有某此用户才具有对指定存储过程的使用权存储过程 减少网络流通量3、存储过程的分类3.1 系统存储过程 由系统定义,存放在master数据库中 系统存储过程的名称都以“sp_”开头或”xp_”开头3.2 用户自定义存储过程 由用户在自己的数据库中创建的存储过程4、常用的系统存储过程4.1 系统存储过程列表系统存储过程说明sp_databases列出服务器上的所有数据库。sp_helpdb报告有关指

    3、定数据库或所有数据库的信息sp_renamedb更改数据库的名称sp_tables返回当前环境下可查询的对象的列表sp_columns回某个表列的信息sp_help查看某个表的所有信息sp_helpconstraint查看某个表的约束sp_helpindex查看某个表的索引sp_stored_procedures列出当前环境中的所有存储过程。sp_password添加或修改登录帐户的密码。sp_helptext显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。4.2 调用常用的系统存储过程EXECsp_databases -列出当前系统中的数据库EXECsp_renam

    4、edbNorthwind,Northwind1-修改数据库的名称(单用户访问)USE stuDB -当前数据库中查询的对象的列表GOEXECsp_tables-返回某个表列的信息EXECsp_columns stuInfo -返回某个表列的信息EXECsp_help stuInfo -查看表stuInfo的信息EXECsp_helpconstraint stuInfo -查看表stuInfo的约束EXECsp_helpindex stuMarks -查看表stuMarks的索引EXECsp_helptextview_stuInfo_stuMarks-查看视图的语句文本EXECsp_stored

    5、_procedures-查看当前数据库中的存储过程4.3 调用常用的扩展存储过程:xp_cmdshell 可以执行DOS命令下的一些的操作,以文本行方式返回任何输出 调用语法:EXECxp_cmdshell DOS命令NO_OUTPUT【案例分析】创建数据库bankDB,要求保存在D:bankUSE masterGOEXECxp_cmdshellmkdir d:bank,no_output -创建文件夹D:bankIFEXISTS(SELECT*FROM sysdatabasesWHEREname=bankDB)DROPDATABASE bankDBGOCREATEDATABASE bankD

    6、B( )GO-查看文件夹D:bankEXECxp_cmdshelldir D:bank-查看文件5、创建存储过程5.1 定义存储过程的语法createprocedure 存储过程名 参数 数据类型= 默认值output, , 参数n 数据类型= 默认值outputAS SQL语句 GO 参数可选 参数分为输入参数、输出参数 输入参数允许有默认值5.2 创建不带参数的存储过程 【问题】请创建存储过程,查看本次考试平均分以及未通过考试的学员名单说明:笔试和机试都通过了60分才算通过。-创建不带参数的存储过程createprocedure proc_stuASdeclare avgwri float

    7、declare avglab floatselect avgwri=avg(笔试成绩),avglab=avg(上机成绩)from 成绩表 -笔试平均分和机试平均分变量print笔试成绩分数=+convert(varchar(10),avgwri)print上机成绩分数=+convert(varchar(10),avglab)if avgwri70 and avglab70 -显示考试成绩的等级print本班成绩:优秀elseprint本班成绩:较差-显示未通过的学员print-print 参加考试不及格的学生 select a.学生姓名,a.学号,b.笔试成绩,b.上机成绩from 学生信息表

    8、as a innerjoin 成绩表as b on a.学号=b.学号where b.笔试成绩60 or b.上机成绩60GO5.3 调用存储过程execute(执行)语句用来调用存储过程调用的语法:EXEC 过程名 参数EXEC proc_stu5.4带参数的存储过程 存储过程的参数分两种:输入参数、输出参数 输入参数:用于向存储过程传入值,类似C语言的按值传递; 输出参数:用于在调用存储过程后,返回结果,类似C语言的按引用传递; int sum (int a, int b) int s; s=a+b; return s;c=sum(5, 8)传入参数值返回结果【问题】修改上例:由于每次考试

    9、的难易程度不一样,每次笔试和机试的及格线可能随时变化(不再是分),这导致考试的评判结果也相应变化。说明:根据试卷的难度,我们希望笔试和机试的及格线应该是随时变化的,而不是固定的60分。【分析】在述存储过程添加个输入参数:writtenPass 笔试及格线labPass 机试及格线-带输入参数的存储过程createprocedure proc_stu2 writtenPass int,-输入参数:笔试及格线 labPass int-输入参数:机试及格线ASprint=print参加考试不及格的学生select a.学生姓名,a.学号,b.笔试成绩,b.上机成绩from 学生信息表as a -查询

    10、没有通过考试的学员innerjoin 成绩表as b on a.学号=b.学号where b.笔试成绩writtenpass or b.上机成绩labpass GO 调用带参数的存储过程-假定本次考试机试偏难,机试的及格线定为分,笔试及格线定为分-机试及格线降分后,李斯文(分)成为“漏网之鱼”了exec proc_stu2 60,55-或这样调用:EXEC proc_stu2 labPass=55,writtenPass=605.5 带输入参数的默认值问题:如果试卷的难易程度合适,则调用者还是必须如此调用:EXEC proc_stu2 60,60,比较麻烦这样调用就比较合理:EXEC proc

    11、_stu2 55 -笔试及格线分,机试及格线默认为分EXEC proc_stu2 -笔试和机试及格线都默认为标准的分createprocedure proc_stu3 writtenPass int=60,-笔试及格线:默认为分 labPass int=60 -机试及格线:默认为分ASprint=print参加本次考试没有通过的学员:select a.学生姓名,a.学号,b.笔试成绩,b.上机成绩from 学生信息表as a-查询没有通过考试的学员innerjoin 成绩表as b ON a.学号=b.学号 WHERE 笔试成绩writtenPass OR 上机成绩labPassGO 调用带参

    12、数默认值的存储过程EXEC proc_stu -都采用默认值EXEC proc_stu 64 -机试采用默认值EXEC proc_stu 60,55 -都不采用默认值-错误的调用方式:希望笔试采用默认值,机试及格线分EXEC proc_stu ,55 -正确的调用方式:EXEC proc_stu labPass=55 5.6 带输出参数的存储过程如果希望调用存储过程后,返回一个或多个值,这时就需要使用输出(OUTPUT)参数了问题:修改上例,返回未通过考试的学员人数。CREATEPROCEDURE proc_stu4 notpassSum intOUTPUT,-输出(返回)参数:表示没有通过的

    13、人数 writtenPass int=60, labPass int=60 AS -推荐将默认参数放后select a.学生姓名,a.学号,b.笔试成绩,b.上机成绩from 学生信息表as a -统计并返回没有通过考试的学员人数innerjoin 成绩表as b on a.学号=b.学号where b.笔试成绩writtenpass or b.上机成绩labpassselect notpassnum=count(学号)from 成绩表where 笔试成绩writtenpass or 上机成绩=3-后续语句引用返回结果print未通过人数:+convert(varchar(5),sum)+人,

    14、超过%,及格分数线还应下调ELSEprint未通过人数:+convert(varchar(5),sum)+人,已控制在%以下,及格分数线适中GO强调:1.调用时也必须跟随关键字OUTPUT,否则SQL Server将视为输入参数。5.7处理存储过程中的错误 可以使用print语句显示错误信息,但这 些信息是临时的,只能显示给用户 raiserror 显示用户定义的错误信息时 可指定严重级别, 设置系统变量ERROR 记录所发生的错误等5.7.1 使用raiserror语句raiserror语句的用法如下: raiserror(msg_id | msg_str,severity,state WI

    15、THoption,.n) msg_id:在sysmessages系统表中指定用户定义错误信息 msg_str:用户定义的特定信息,最长255个字符 severity:定义严重性级别。用户可使用的级别为018级 state:表示错误的状态,1至127之间的值 option:指示是否将错误记录到服务器错误日志中 问题:完善上例,当用户调用存储过程时,传入的及格线参数不在之间时,将弹出错误警告,终止存储过程的执行。说明:笔试和机试都通过了60分才算通过。CREATEPROCEDURE proc_stu5 notpassSum intOUTPUT,-输出参数 writtenPass int=60,-默

    16、认参数放后 labPass int=60 -默认参数放后AS-错误处理IF(NOT writtenPass BETWEEN 0 AND 100)OR(NOT labPass BETWEEN 0 AND 100)BEGINraiserror(及格线错误,请指定之间的分数,统计中断退出,16,1)RETURN-立即返回,退出存储过程END .其他语句同上例,略GO -引发系统错误,指定错误的严重级别,调用状态为(默认),并影响ERROR系统变量的值/*-调用存储过程,测试RAISERROR语句-*/DECLARE sum int, t intEXEC proc_stu sum OUTPUT,604

    17、 -笔试及格线误输入分SET t=ERRORprint错误号:+convert(varchar(5),t )IF t0 -不等于0RETURN-退出批处理,后续语句不再执行print=IF sum=3-如果执行了RAISERROR语句,系统全局ERROR将不等于,表示出现了错误print未通过人数:+convert(varchar(5),sum)+人,超过%,及格分数线还应下调ELSEprint未通过人数:+convert(varchar(5),sum)+人,已控制在%以下,及格分数线适中GO6用户自定义函数在SQL Server中,用户不仅可以使用标准的内置函数,也可以使用自己定义的函数来实

    18、现一些特殊的功能。 用户自定义函数可以在企业管理器中创建,也可以使用create function语句创建。在创建时需要注意:函数名在数据库中必须唯一,其可以有参数,也可以没有参数,其参数只能是输入参数,最多可以有1024参数。 标量函数:返回单个数据值。 表值函数:返回值是一个记录集合表。在此函数中,return语句包含一条单独的select语句。 多语句表值函数:返回值是由选择的结果构成的记录集。6.1 使用create function语句创建用户自定义函数使用createfunction创建用户自定义函数,其语法格式如下:createfunction owner_name. funct

    19、ion_name( parameter_name AS scalar_parameter_data_type = default ,.n )returns scalar_return_data_type as begin function_body retunrn scalar_expressionend function_name:指用户自定义函数的名称。其名称必须符合标识符的命名规则,并且对其所有者来说,该名称在数据库中必须唯一。 parameter_name:用户自定义函数的参数,其可以是一个或多个。每个函数的参数仅用于该函数本身;相同的参数名称可以用在其它函数中。参数只能代替常量;而不

    20、能用于代替表名、列名或其它数据库对象的名称。函数执行时每个已声明参数的值必须由用户指定,除非该参数的默认值已经定义。如果函数的参数有默认值,在调用该函数时必须指定default关键字才能获得默认值。 scalar_parameter_data_type:参数的数据类型。 scalar_return_data_type:是用户定义函数的返回值。可以是 SQL Server 支持的任何标量数据类型(text、ntext、image 和 timestamp 除外)。 function_body:位于begin和end之间的一系列 Transact-SQL 语句,其只用于标量函数和多语句表值函数。 s

    21、calar_expression:用户自定义函数中返回值的表达式。6.2 标量函数例:在stuDB库中创建一个用户自定义标量值函数xuefen,该函数通过输入成绩来判断是否取得学分,当成绩大于等于60时,返回取得学分,否则,返回未取得学分。代码如下:USE stuDBGOCREATEFUNCTION xuefen(chengji int)RETURNSnvarchar(10)BEGINdeclare returnsxuefen nvarchar(10)if chengji60set returnsxuefen=取得学分elseset returnsxuefen=不能取得学分RETURN ret

    22、urnsxuefenENDGO使用刚才定义的xuefen函数来查看课程号为“”的课程,学生获得学分的情况。在查询编辑器中输入如下代码:USE stuDBGOSELECT 学号,成绩=(笔试成绩+上机成绩)/2,dbo.xuefen(笔试成绩+上机成绩)/2) AS 学分情况FROM 成绩表 WHERE 课程号=GO6.3 表值函数表值函数遵循的原则: RETURNS子句仅包含关键字table。不必定义返回变量的格式,因为它由RETURN 子句中的 SELECT 语句的结果集的格式设置。 FUNCTION BODY 不由BEGIN和END分隔。 RETURN子句在括号中包含单个SELECT语句。

    23、SELECT语句的结果集构成函数所返回的表。例:在stuDB库中创建一个内嵌表值函数XUESHENG,该函数可以根据输入的系部代码返回该系学生的基本信息。其代码如下:CREATEFUNCTION XUESHENG(inputdep nvarchar(4)RETURNStableASRETURN(SELECT 学号, 姓名 FROM 学生WHERE 所属院系=inputdep)GO建立好该内嵌表值函数后,就可以象使用表或视图一样来使用它:SELECT*FROM DBO.XUESHENG()GO6.4 多语句表值函数多语句函数的主体中允许使用以下语句: 赋值语句 DECLARE 语句,该语句定义函

    24、数局部的数据变量和游标。 SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。 游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以INTO子句向局部变量赋值的FETCH语句;不允许使用将数据返回到客户端的FETCH语句。 INSERT、UPDATE和DELETE语句,这些语句修改函数的局部table变量。 EXECUTE语句调用扩展存储过程。6.5 多语句表值函数案例:在stuDB库中创建一个多语句表值函数chengji,该函数可以根据输入的课程名称返回选修该课程的学生姓名和成绩。代码如下:USE stuDBGOCREATEFUNCT

    25、ION chengji( inputkm aschar(20)/*为chengji 函数定义的表结构,名称变量为cji*/RETURNS cj TABLE(科目编号varchar(10), 姓名varchar(10), 成绩int)ASBEGININSERT cj /*该变量是上面定义的表名称变量*/select b.科目编号,a.学生姓名,(b.笔试成绩+b.上机成绩)/2 from 学生信息表as a innerjoin 成绩表as b on a.学号=b.学号where b.科目编号=inputkm RETURNENDGO 在查询编辑器中输入以下查询命令: SELECT * FROM d

    26、bo.chengji(9001)6.6 查看、修改和删除自定义函数1.查看用户自定义函数的属性在SQL Server中,根据不同需要,可以使用sp_helptext、sp_help等系统存储过程来查看用户自定义函数的不同信息。每个系统存储过程的具体作用和语法如下:使用sp_helptext查看用户定义函数的文本信息,其语法格式为:sp_helptext 用户自定义函数名使用sp_help查看用户自定义函数的一般信息,其语法格式为:sp_help 用户自定义函数名例:使用有关系统过程查看STUDENT数据库中名为XUEFEN的用户自定义函数的文本信息。其程序代码如下:USE STUDB GOSP

    27、_HELPTEXT XUEFEN GO2.修改用户自定义函数的属性使用SQL命令修改用户自定义函数,使用ALTERFUNCTION 命令可以修改用户自定义函数。修改由CREATEFUNCTION 语句创建的现有用户定义函数,不会更改权限,也不影响相关的函数、存储过程或触发器。其语法格式如下:ALTERFUNCTION owner_name. function_name( parameter_name AS scalar_parameter_data_type = default ,.n )RETURNS scalar_return_data_type AS BEGIN function_bod

    28、yRETURN scalar_expressionEND其中的参数与建立用户自定义函数中的参数意义相同。3.使用T-SQL命令删除用户自定义函数使用DROP命令可以一次删除多个用户自定义函数,其语法格式为:DROPFUNCTION 所有者名称.函数名称,n案例:删除在student库上建立的xuefen函数。代码如下:USE studentGODROP FUNCTION dbo.xuefenGO总结 存储过程是一组预编译的SQL语句,它可以包含数据操纵语句、变量、逻辑控制语句等 存储过程允许带参数,参数分为: 输入参数 输出参数 其中,输入参数可以有默认值。 输入参数:可以在调用时向存储过程传递参数,此类参数可用来向存储过程中传入值 输出参数从存储过


    注意事项

    本文(完整word版SQL存储过程学习总结.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开