1、DLPU第 6章 存储过程、触发器及游标1.存储过程2.触发器3.游标6.1存储过程v定义n 存储过程 是一组为了完成特定功能的 SQL语句的集合 , 它经编译后存储在数据库中,用户通过指定的调用方法执行之。存储过程具有名称,参数及返回值,并且可以嵌套调用。6.1.1 存储过程概述v存储过程分类n 系统存储过程n 扩展存储过程n 用户自定义存储过程v存储过程的优点n 快速执行n 安全性好n 访问统一n 命名代码,允许延迟绑定n 减少网络通信流量6.1.1 存储过程概述v存储过程与函数的区别n 存储过程是预编译的, 执行效率比函数高 。n 存储过程可以不返回任何值,也可以返回多个输出变量,但 函
2、数有且必须有一个返回值 。n 存储过程必须 单独执行 ,而函数可以嵌入到表达式中,使用更灵活。n 存储过程主要是对 逻辑处理的应用或解决 ,函数主要是一种功能应用 。6.1.2 创建存储过程1在 SQL Server Management Studio中创建存储过程图 6-1 创建存储过程1.打开 SQL Server Management Studio,在 “对象资源管理器 ”中,展开 “数据库 ”目录,选择 “TSG”数据库,在选择 “可编程性|存储过程 ”节点(如图 6-1)。右击该节点,在弹出快捷菜单中选择 “新建存储过程 ”命令,系统将打开代码编辑器,并按照存储过程的格式显示编码模板
3、。2.在 代码编辑器 中,用户根据需要更改存储过程名称,添加修改参数及存储过程的代码段,完成存储过程的编写之后,单击 “执行 ”按钮,如果代码有错误,会在下面消息栏中显示出错信息及所在行等信息,提示用户进行修改,在出现 “命令已成功完成”提示后,即完成创建。6.1.2 创建存储过程2.使用 CREATE PROCEDURE语句 创建存储过程n procedure_name: 存储过程的名称n parameter: 存储过程中的参数n data_type: 参数的数据类型n Default: 参数的默认值 n OUTPUT: 指示该参数是输出参数 n READONLY: 指示该参数是只读的n E
4、NCRYPTION: 指示加密存储n sql_statement:包含在过程中的一个或多个 T-SQL 语句CREATE PROCEDURE procedure_nameparameter data_type=defaultOUT|OUTPUTREADONLY,n WITHENCRYPTION,n AS ;n ;6.1.2 创建存储过程【例 6-1】 以 TSG数据库为当前数据库 ,创建存储过程,查询目前已经外借的图书的读者证号,书名和借出时间。CREATE PROCEDURE usp_Lend_InfoASSELECT L.PatronID,B.Title,L.LendTimeFROM Le
5、nd L JOIN Book BON B.CallNo=L.CallNo AND L.ReturnTime IS NULL显示存储过程代码v通过检索数据库的系统表 sysobjects以及syscomments,查看存储过程的代码SELECT text FROM syscomments where id IN(SELECT id FROM sysobjectswhere name =usp_Lend_Info)v使用系统存储过程 sp_helptext 来显示 代码sp_helptext usp_Lend_Info* 如果在存储过程定义中使用了 ENCRYPTION指示符则无法显示代码。检查存
6、储过程是否重名使用 sysobjects 表查询法IF NOT EXISTS (SELECT name FROM sysobjects WHERE name =procname AND type=P)CREATE PROCEDURE procnamev使用 OBJECT_ID函数IF OBJECT_ID(storename,P) IS NULL CREATE PROCEDURE storename6.1.3 执行存储过程v使用 T-SQL的 EXECUTE 语句执行存储过程。EXECUTEreturn_status= procedure_name parameter=value|variableOUTPUT ,n WITH RECOMPILE;n return_status:保存存储过程的返回状态。n procedure_name:是要调用的存储过程名称。n value:传递给存储过程的参数值。可以按名称调用,也可以按在模块中定义的顺序提供。n variable:是用来存储输入参数或输出参数的变量。n OUTPUT:指定存储过程将值送入输出参数。n WITH RECOMPILE :执行该存储过程时强制重新编译。