



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
12.3.3 执行存储过程当需要执行存储过程时,可使用EXECUTE或EXEC 语句。如果存储过程是批处理中的第一条语句,那么不使用 EXECUTE 或EXEC关键字也可以执行该存储过程。如果存储过程编写为可以接受参数值,那么可以提供参数值。任务12.4 问题描述:执行任务12.3创建的存储过程Insertproduct,向产品表中追加一行。解决方案1:EXEC Insertproduct 8,Konbu, 2 kg box, 24,6.0000, 5,10,0解决方案2:EXEC Insertproduct 8,Konbu, 2 kg box, 24,6.0000, 5,10解决方案3:EXEC Insertproduct default,Konbu, 2 kg box, 24,6.0000, 5,10解决方案4:EXEC Insertproduct ProductName=Konbu,QuantityPerUnit=2 kg box, UnitsInStock=24,UnitPrice=6.0000,UnitsOnOrder=5,ReorderLevel=10解决方案5:EXEC Insertproduct ReorderLevel=10, UnitsOnOrder=5, UnitsInStock=24,UnitPrice=6.0000, QuantityPerUnit=2 kg box,ProductName=Konbu分析与讨论:1.如果存储过程含有参数,则在执行存储过程时,必须为这些参数提供值(具有默认值的参数可以不提供值),而且提供的值必须是确定的值,例如方案1。并且必须按照 CREATE PROCEDURE 语句中存储过程参数给出的顺序提供参数值,以下语句就会发生错误,因为不是按照顺序提供参数值。EXEC Insertproduct Konbu,8,2 kg box, 24,6.0000, 5,10,02.如果存储过程含有默认值参数,则在执行存储过程时,可省略为默认值参数提供值,但其它参数的值不能够省略,必须为这些参数提供值。例如方案2,没有为Discontinued参数提供值,则在执行存储过程时该参数的值为其默认值1. 3.虽然可以省略已提供默认值的参数,但只能截断参数列表。例如,如果一个存储过程有八个参数,可以省略第七个和第八个参数,但不能跳过第七个参数而仍然包含第八个参数,除非以 parameter = value 形式提供参数(参见4)。例如,方案2中,CategoryID参数尽管是有默认值的参数,但由于它是第一个参数,而存储过程第二个参数必须提供值,因此执行存储过程时要为CategoryID参数提供值,不能省略。如果要使用默认值作为参数的值,则可以使用DEFAULT关键字,例如方案3。如果在存储过程中定义了参数的默认值,那么下列情况下将使用默认值:1)执行存储过程时未指定参数值。2)将 DEFAULT 关键字指定为参数值。4. 执行存储过程时,既可以通过提供在 CREATE PROCEDURE 语句中给定的参数值(如解决方案1,解决方案2),来向存储过程参数传递值。也可以通过显式指定参数名称并分配适当的值(使用 parameter = value 的形式),来给存储过程参数传递值。如果使用 parameter = value 的形式,那么可以按任意顺序提供参数,还可以省略那些已提供默认值的所有参数。注意,如果以 parameter = value 形式提供了一个参数,就必须按此种形式提供后面所有的参数。例如解决方案4和解决方案5,执行存储过程时存储过程ProductName参数的值为Konbu,QuantityPerUnit参数的值为2 kg box, UnitsInStock参数的值为24,UnitPrice参数的值为6.0000,UnitsOnOrder参数的值为5,ReorderLevel参数的值为10,没有提供CategoryID和Discontinued参数的值,它们的值为其默认值。执行存储过程时,如果参数名称和存储过程的参数名称不匹配,则这些参数都不会被接受。例如以下代码参数名称ReorderLevelA和存储过程的参数名称不匹配,则参数ReorderLevelA不会被接受。EXEC Insertproduct ReorderLevelA=10, UnitsOnOrder=5, UnitsInStock=24,UnitPrice=6.0000, QuantityPerUnit=2 kg box,ProductName=Konbu执行存储过程时,服务器将拒绝所有未包含在存储过程创建期间的参数列表中的参数。注意,在执行存储过程时指定参数名称允许按任意顺序提供参数值。如果未指定参数名称,则必须按照参数在存储过程中定义时的顺序(从左至右)来提供参数值(按照位置传递参数值),并且,如果给某一参数提供了值,则该参数前面的所有参数必须为它们提供值,即使这些参数有默认值(如方案2)。12.4.1 使用变量、IF语句和RETURN语句变量用来存储程序在运行过程中可以使用的值,用户可以定义变量,用户定义的变量称为局部变量。IF语句根据表达式的值选择要执行的语句。IF语句的一般表示形式为:IF (表达式) BEGIN语句块;ENDIF语句的执行方式如下:如果表达式的值为TRUE,则执行语句块,否则语句块不会被执行。语句块可为一条或多条语句,如果句块可为一条语句,可省略BEGIN、END。任务12.6 问题描述: 创建一个存储过程,用参数指定的产品类别ID的值查询该类的所有产品,并测试错误,如果存储过程成功执行,则存储过程返回0,如果执行存储过程时,执行存储过程中的SQL 语句发生错误,则存储过程返回返回错误号。并创建代码测试该程序过程。解决方案:1)创建ProductsByCategory1存储过程CREATE Procedure ProductsByCategory1( CategoryID int)ASDECLARE ErrorSave int;SET ErrorSave = 0;SELECT * FROM ProductsWHERE CategoryID = CategoryIDORDER BY ProductName;IF (ERROR 0)BEGINSET ErrorSave = ERROR;ENDRETURN ErrorSave;GO2)创建测试代码DECLARE ReturnStatus int;EXECUTE ReturnStatus =ProductsByCategory1 1;SELECTReturn code = + CAST(ReturnStatus AS CHAR(10);GO分析与讨论:1声明变量。使用DECLARE 语句声明变量,其格式如下:DECLARE 变量名 数据类型和长度变量名的第一个字符必须为一个 。声明变量后变量的值初始化为 NULL。变量不能是 text、ntext 或 image 数据类型。下面的语句创建了一个名为ErrorSave的变量,该变量的数据类型为int,变量的值设置为 NULL。DECLARE ErrorSave int;若要声明多个局部变量,可在定义的第一个变量后使用一个逗号,然后指定下一个变量名称和数据类型。例如,此 DECLARE 语句创建了三个名为 ProductName、QuantityPerUnit e 和ProductID的变量,并将每个变量都初始化为 NULL:DECLARE ProductName nvarchar(30), QuantityPerUnit nvarchar(20), ProductID int;变量的作用域就是可以引用该变量的SQL 语句的范围。变量的作用域从声明变量的地方开始到声明变量的批处理或存储过程的结尾。2. 变量赋值。可使用 SET 语句为变量赋值,例如,下面的语句将值0赋给变量ErrorSave。其中,“=”为赋值运算符。SET ErrorSave = 0;3.输出变量的值。可以使用SELECT语句变量的值。例如以下示例首先声明变量ReturnStatus,然后执行存储过程,将存储过程ProductsByCategory1的返回值赋给ReturnStatus变量,最后输出变量ReturnStatus的值:DECLARE ReturnStatus int;EXECUTE ReturnStatus =ProductsByCategory1 1;SELECT ReturnStatus;也可以使用SELECT语句输出表达式的值。例如:SELECTReturn code = + CAST(ReturnStatus AS CHAR(10);如果使用SELECT输出多个变量或表达式的值,则变量或表达式之间用逗号分隔。例如:SELECT ProductName, QuantityPerUnit, ProductID;SELECT 表达式1, 表达式2, 表达式2;4. 使用 ERROR。ERROR是系统函数,它用来检测它的上一条SQL 语句是否执行成功,如果上一条SQL 语句执行成功,则ERROR 系统函数返回 0;如果上一条SQL 语句语句生成错误,ERROR 将返回错误号。ERROR 通常用于检测存储过程是成功还是失败。整数变量(如ErrorSave)被初始化为 0。在每个SQL 语句完成之后,立即测试 ERROR 是否为 0,如果不是 0,将ERROR 保存到整数变量中。然后,存储过程将在 RETURN 语句中返回变量。如果过程中的SQL 语句都没有错误,变量将保持为 0。如果一个或多个语句生成错误,变量将包含最后一个错误号。5. IF 语句。如果IF 语句中条件表达式的值为 TRUE ,则执行 IF 语句后的语句或语句块。如果IF 语句中条件表达式的值为 FALSE ,则跳过 IF 语句后的语句或语句块。例如,在以上存储过程中,如果ERROR的值为0,则条件表达式ERROR 0的值为 FALSE,这时不执行SET ErrorSave = ERROR语句。如果ERROR的值不为0,则条件表达式ERROR 0的值TRUE,这时执行SET ErrorSave = ERROR语句。该语句将ERROR的值赋给变量ErrorSave。6. 使用 BEGIN.END。BEGIN 和 END用于定义语句块,它们可以用于定义一系列一起执行的 SQL 语句。BEGIN 和 END 语句必须成对使用,任何一个均不能单独使用。BEGIN 语句单独出现在一行中,后跟SQL 语句块。最后,END 语句单独出现在一行中,指示语句块的结束。BEGIN 和 END 语句块必须至少包含一条SQL 语句。7. RETURN语句。RETURN 语句无条件从查询、存储过程或批处理中退出。RETURN 语句后面的语句都不执行。RETURN 语句的一般格式为:RETURN integer_expression 其中integer_expression 为返回的整数值或整型表达式。当在存储过程中使用 RETURN 语句时,此语句可以指定返回给调用程序、批处理或过程的整数值。如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电梯检修考试题及答案
- 电力英文考试题及答案
- 电工考试题及答案初级
- 低血压考试题及答案
- (正式版)DB15∕T 3254.3-2023 《餐饮服务单位管理规范 第3部分:从业人员健康管理》
- (正式版)DB15∕T 3233-2023 《苜蓿混作饲用燕麦高效栽培技术规程》
- 产品设计阶段验收及缺陷检测标准
- 大学语法考试题及答案
- 高一物理光学实验教程
- 企业信息化基础平台搭建规划及实施方案
- 2025静脉治疗规范
- 锅炉房设计规范
- 京东自营采购合同
- 2024年设备监理师考试题库附参考答案【基础题】
- 2025年保密知识试题库附参考答案(精练)
- 信息与网络安全培训
- 人教版七上《峥嵘岁月-美术中的历史》教案
- 职工食堂服务(技术方案)
- 厂房租赁合同书格式
- GB/T 15934-2024电器附件电线组件和互连电线组件
- 《计算机网络技术》课程教案(完整版)
评论
0/150
提交评论