第 存储过程与触发器.pptx
《第 存储过程与触发器.pptx》由会员分享,可在线阅读,更多相关《第 存储过程与触发器.pptx(87页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、10.1 存储过程概述 存储过程是SQL Server服务器上一组预编译的Transact-SQL语句,用于完成某项任务,它可以接受参数、返回状态值和参数值,并且可以嵌套调用。第1页/共87页10.1 10.1 存储过程概述存储过程概述SQL Server存储过程的类型包括:系统存储过程用户定义存储过程临时存储过程扩展存储过程。1.存储过程的类型第2页/共87页10.1 10.1 存储过程概述存储过程概述(1)系统存储过程 是指由系统提供的存储过程,主要存储在master数据库中并以sp_为前缀,它从系统表中获取信息,从而为系统管理员管理SQL Server提供支持。通过系统存储过程,SQL
2、Server中的许多管理性或信息性的活动(例如使用sp_depends、sp_helptexts可以了解数据数据库对象、数据库信息)都可以顺利有效地完成。尽管系统存储过程被放在master数据库中,仍可以在其他数据库中对其进行调用(调用时,不必在存储过程名前加上数据库名)。当创建一个新数据库时,一些系统存储过程会在新数据库中被自动创建。第3页/共87页10.1 10.1 存储过程概述存储过程概述(2)用户定义存储过程是由用户创建并能完成某一特定功能(例如查询用户所需数据信息)的存储过程。它处于用户创建的数据库中,存储过程名前没有前缀sp_。第4页/共87页10.1 10.1 存储过程概述存储过
3、程概述(3)临时存储过程临时存储过程与临时表类似,分为局部临时存储过程和全局临时存储过程,且可以分别向该过程名称前面添加“#”或“#”前缀表示。“#”表示本地临时存储过程,“#”表示全局临时存储过程。使用临时存储过程必须创建本地连接,当SQL Server关闭后,这些临时存储过程将自动被删除。由于SQL Server支持重新使用执行计划,所以连接到SQL Server 2000的应用程序应使用sp_executesql系统存储过程,而不使用临时存储过程。第5页/共87页10.1 10.1 存储过程概述存储过程概述(4)扩展存储过程扩展存储过程是SQL Server可以动态装载和执行的动态链接库
4、(DLL)。当扩展存储过程加载到SQL Server中,它的使用方法与系统存储过程一样。扩展存储过程只能添加到master数据库中,其前缀是xp_。第6页/共87页10.1 10.1 存储过程概述存储过程概述2.存储过程的功能特点SQL Server的存储过程可实现以下功能:(1)接收输入参数并以输出参数的形式为调用过程或批处理返回多个值。(2)包含执行数据库操作的编程语句,包括调用其他过程。(3)为调用过程或批处理返回一个状态值,以表示成功或失败(及失败原因)。第7页/共87页10.1 10.1 存储过程概述存储过程概述存储过程具有以下优点(1)模块化编程。(2)快速执行。(3)减少网络通信
5、量。(4)提供安全机制。(5)保证操作一致性。第8页/共87页10.2.1 创建存储过程10.2.2 执行存储过程10.2.3 修改存储过程10.2.4 删除存储过程10.2.5 存储过程参数与状态值10.2 存储过程的创建与使用第9页/共87页10.2.1 创建存储过程1使用SQL Server管理平台创建存储过程(1)打开SQL Server管理平台,展开节点“对象资源管理器”“数据库服务器”“可编程性”“存储过程”,在窗口的右侧显示出当前数据库的所有存储过程。单击鼠标右键,在弹出的快捷菜单中选择“新建存储过程”命令。10.2 10.2 存储过程的创建与使用存储过程的创建与使用第10页/共
6、87页(2)在打开的SQL命令窗口中,系统给出了创建存储过程命令的模板,如图10-2所示。在模板中可以输入创建存储过程的Transact-SQL语句后,单击“执行”按钮即可创建存储过程。10.2.1 10.2.1 创建存储过程创建存储过程第11页/共87页(3)建立存储过程的命令被成功执行后,在“对象资源管理器”“数据库服务器”“可编程性”“存储过程”中可以看到新建立的存储过程 10.2.1 10.2.1 创建存储过程创建存储过程第12页/共87页2.使用CREATE PROCEDURE语句创建存储过程使用CREATE PROCEDURE语句创建存储过程应该考虑以下几个方面:(1)在一个批处理
7、中,CREATE PROCEDURE语句不能与其他SQL语句合并在一起。(2)数据库所有者具有默认的创建存储过程的权限,它可把该权限传递给其他的用户。(3)存储过程作为数据库对象其命名必须符合标识符的命名规则。(4)只能在当前数据库中创建属于当前数据库的存储过程。10.2.1 10.2.1 创建存储过程创建存储过程第13页/共87页创建存储过程语句的语法格式如下:CREATE PROCEDURE procedure_name;number parameter data_type VARYING=default OUTPUT,.n WITH RECOMPILE|ENCRYPTION|RECOMP
8、ILE,ENCRYPTION FOR REPLICATION AS sql_statement,.n 10.2.1 10.2.1 创建存储过程创建存储过程第14页/共87页例10-1 创建存储过程,从表goods和表goods_classification的联接中返回商品名、商品类别、单价。10.2.1 10.2.1 创建存储过程创建存储过程CREATE PROCEDURE goods_info ASSELECT goods_name,classification_name,unit_priceFROM goods g INNER JOIN goods_classification gcON
9、g.classification_id=gc.classification_id存储过程创建后,存储过程的名称存放在sysobject表中,文本存放在syscomments表中。第15页/共87页10.2.2 执行存储过程执行存储过程的语法格式:EXECUTE return_status=procedure_name;number|procedure_name_var parameter=value|variable OUTPUT|DEFAULT ,.n WITH RECOMPILE 10.2 10.2 存储过程的创建与使用存储过程的创建与使用第16页/共87页例如,执行例10-1的存储过程g
10、oods_info在SQL查询分析器中输入命令:EXEC goods_info运行的结果:10.2.2 10.2.2 执行存储过程执行存储过程第17页/共87页10.2 10.2 存储过程的创建与使用存储过程的创建与使用10.2.3 修改存储过程修改存储过程可以通过SQL Server管理平台和Transact-SQL语句实现。1使用SQL Server管理平台修改存储过程 第18页/共87页10.2.3 10.2.3 修改存储过程修改存储过程2.使用ALTER PROCEDURE语句修改存储过程ALTER PROCEDURE的语法规则是:ALTER PROCEDURE procedure_n
11、ame ;number parameter data_typeVARYING=default OUTPUT ,.n WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTIONFOR REPLICATION AS sql_statement .n 第19页/共87页10.2.3 10.2.3 修改存储过程修改存储过程例10-2 使用ALTER PROCEDURE语句更改存储过程。(1)创建存储过程employee_dep,以获取总经理办的男员工。CREATE PROCEDURE employee_dep AS SELECT employee_name,sex,a
12、ddress,department_nameFROM employee e INNER JOIN department d ON e.department_id=d.department_id WHERE sex=男 AND e.department_id=D001GO执行存储过程employee_dep,结果如图 第20页/共87页10.2.3 10.2.3 修改存储过程修改存储过程(2)查看employee_dep存储过程的文本信息SELECT o.id,c.textFROM sysobjects o INNER JOIN syscomments c ON o.id=c.idWHERE o
13、.type=P AND o.name=employee_depGO第21页/共87页10.2.3 10.2.3 修改存储过程修改存储过程(3)使用ALTER PROCEDURE语句对employee_dep过程进行修改,使其能够显示出所有男员工,并使employee_dep过程以加密方式存储在表syscomments中ALTER PROCEDURE employee_depWITH ENCRYPTION AS SELECT employee_name,sex,address,department_nameFROM employee e INNER JOIN department d ON e.
14、department_id=d.department_id WHERE sex=男 GO第22页/共87页10.2.3 10.2.3 修改存储过程修改存储过程执行修改后的存储过程employee_dep,结果如图:第23页/共87页10.2.3 10.2.3 修改存储过程修改存储过程(4)从系统表sysobjects和syscomments提取修改后的存储过程employee_dep的文本信息可以运行步骤(2)中的代码,结果如图 这是由于在ALTER PROCEDURE语句中使用WITH ENCRYPTION关键字对存储过程employee_dep的文本进行了加密,其文本信息显示为NULL。第
15、24页/共87页10.2 10.2 存储过程的创建与使用存储过程的创建与使用10.2.4 删除存储过程 存储过程可以被快速删除和重建,因为它没有存储数据。1使用SQL Server管理平台删除存储过程(1)打开SQL Server管理平台,展开节点“对象资源管理器”“数据库服务器”“可编程性”“存储过程”,选择要删除的存储过程,单击鼠标右键,在弹出的快捷菜单中选择“删除”命令。(2)在弹出的“删除对象”对话框中单击“确定”按钮即可删除存储过程。第25页/共87页10.2.4 10.2.4 删除存储过程删除存储过程2.使用DROP PROCEDURE删除存储过程DROP PROCEDURE的语法
16、如下:DROP PROCEDURE procedure_name ,.n 例如删除例10-2创建的存储过程employee_dep:DROP PROCEDURE employee_depGO第26页/共87页10.2 10.2 存储过程的创建与使用存储过程的创建与使用10.2.5 存储过程参数与状态值存储过程和调用者之间通过参数交换数据,可以按输入的参数执行,也可由参数输出执行结果。调用者通过存储过程返回的状态值对存储过程进行管理。1.参数存储过程的参数在创建过程时声明。SQL Server支持两类参数:输入参数和输出参数。第27页/共87页10.2.5 10.2.5 存储过程参数与状态值存储
17、过程参数与状态值(1)输入参数输入参数允许调用程序为存储过程传送数据值。要定义存储过程的输入参数,必须在CREATE PROCEDURE语句中声明一个或多个变量及类型。第28页/共87页10.2.5 10.2.5 存储过程参数与状态值存储过程参数与状态值例10-3 创建带参数的存储过程,从表employee、sell_order、goods、goods_classification的连接中返回输入的员工名、该员工销售的商品名、商品类别、销售量等信息。CREATE PROC sell_info employee_name varchar(20)AS SELECT employee_name,go
18、ods_name,classification_name,order_numFROM employee e INNER JOIN sell_order s ON e.employee_id=s.employee_id JOIN goods g ON g.goods_id=s.goods_id JOIN goods_classification gc ON gc.classification_id=g.classification_idWHERE employee_name LIKE employee_name第29页/共87页10.2.5 10.2.5 存储过程参数与状态值存储过程参数与状态值
19、存储过程sell_info以employee_name变量作为输入参数,执行时,可以省略参数名,直接给参数值。在SQL查询分析器中输入命令:EXEC sell_info 东方牧运行结果如图。n参数值可以包含通配符“%”,例如,查找所有姓“钱”的员工的销售情况可以使用以下命令:nEXEC sell_info 钱%第30页/共87页10.2.5 10.2.5 存储过程参数与状态值存储过程参数与状态值执行时,参数可以由位置标识,也可以由名字标识。例如,定义一个具有3个参数的存储过程:CREATE PROC myproc val1 int,val2 int,val3 intAS.参数以位置传递:EXE
20、C myproc 10,20,15参数以名字传递,每个值由对应的参数名引导:EXEC myproc val2=20,val1=10,val3=15按名字传递参数比按位置传递参数具有更大的灵活性。但是,按位置传递参数却具有更快的速度。第31页/共87页10.2.5 10.2.5 存储过程参数与状态值存储过程参数与状态值(2)输出参数输出参数允许存储过程将数据值或游标变量传回调用程序。OUTPUT关键字用以指出能返回到调用它的批处理或过程中的参数。为了使用输出参数,在CREATE PROCEDURE和EXECUTE语句中都必须使用OUTPUT关键字。第32页/共87页10.2.5 10.2.5 存
21、储过程参数与状态值存储过程参数与状态值例10-4 创建存储过程price_goods,通过输入参数在goods表中查找商品,以输出参数获取商品单价。CREATE PROC price_goods goods_name varchar(80)=NULL,price_goods real OUTPUTASSELECT price_goods=unit_priceFROM goodsWHERE goods_name=goods_name第33页/共87页10.2.5 10.2.5 存储过程参数与状态值存储过程参数与状态值执行price_goods存储过程的代码如下:DECLARE price rea
22、lEXEC price_goods Canon LBP2900,price OUTPUTSELECT price运行结果是商品名为Canon LBP2900的商品单价:1380.0EXECUTE语句还需要关键字OUTPUT以允许参数值返回给变量。第34页/共87页10.2.5 10.2.5 存储过程参数与状态值存储过程参数与状态值(1)用RETURN语句定义返回值存储过程可以返回整型状态值,表示过程是否成功执行,或者过程失败的原因。如果存储过程没有显式设置返回代码的值,则SQL Server返回代码为 0,表示成功执行;若返回-1-99之间的整数,表示没有成功执行。也可以使用RETURN语句,
23、用大于0或小于-99的整数来定义自己的返回状态值,以表示不同的执行结果。2.返回存储过程的状态第35页/共87页10.2.5 10.2.5 存储过程参数与状态值存储过程参数与状态值例10-5 创建存储过程,输入商品类别,返回各种商品名称。在存储过程中,用值15表示用户没有提供参数;值-l01表示没有输入商品类别;值0表示过程运行没有出错。CREATE PROC cl_goods cl_name varchar(40)=NULLASIF cl_name=NULL RETURN 15IF NOT EXISTS(SELECT*FROM goods_classification WHERE class
24、ification_name=cl_name)RETURN-101SELECT g.goods_name FROM goods_classification gc,goods gWHERE gc.classification_id=g.classification_id AND gc.classification_name=cl_nameRETURN 0第36页/共87页10.2.5 10.2.5 存储过程参数与状态值存储过程参数与状态值在执行过程时,要正确接收返回的状态值,必须使用以下语句;EXECUTE status_var=procedure_name(2)捕获返回状态值第37页/共87
25、页10.2.5 10.2.5 存储过程参数与状态值存储过程参数与状态值DECLARE return_status intEXEC return_status=cl_goods 笔记本计算机IF return_status=15 SELECT 语法错误ELSE IF return_status=-101 SELECT 没有找到该商品类别执行时,将对不同的输入值返回不同的状态值及处理结果。例10-5的存储过程cl_goods执行时使用以下语句:第38页/共87页触发器是一种特殊类型的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过过程名字直接调用。当对某一表进行UPDATE、I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储过程与触发器 存储 过程 触发器
限制150内