存储过程和触发器PPT讲稿.ppt
《存储过程和触发器PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《存储过程和触发器PPT讲稿.ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、存储过程和触发器存储过程和触发器第1页,共69页,编辑于2022年,星期六本章重点本章重点q存储过程的概念、分类存储过程的概念、分类q存储过程的创建、执行存储过程的创建、执行q触发器的概念、分类触发器的概念、分类q触发器的创建、触发触发器的创建、触发qDELETED与与INSERTED表表第2页,共69页,编辑于2022年,星期六2023/1/182本章难点本章难点q有参存储过程的创建、执行有参存储过程的创建、执行q触发器的触发时机触发器的触发时机qDELETED与与INSERTED表表第3页,共69页,编辑于2022年,星期六2023/1/18310.1 10.1 存储过程的概念存储过程的概
2、念1011基本概念基本概念存储过程是一组编译在单个执行计划中的存储过程是一组编译在单个执行计划中的Transact-SQL语句,将一些固定的操作集中起来交给语句,将一些固定的操作集中起来交给SQLServer数数据库服务器据库服务器完成,以实现某个任务。完成,以实现某个任务。1012存储过程的优点存储过程的优点(1)与其他应用程序共享应用程序逻辑,因而确保了数据访)与其他应用程序共享应用程序逻辑,因而确保了数据访问和修改的一致性。问和修改的一致性。(2)防止数据库中表的细节暴露给用户。)防止数据库中表的细节暴露给用户。(3)提供安全机制。)提供安全机制。(4)改进性能。)改进性能。(5)减少网
3、络流量。)减少网络流量。第4页,共69页,编辑于2022年,星期六2023/1/1841013存储过程的类型存储过程的类型存储过程分为三类:存储过程分为三类:q系统提供的存储过程系统提供的存储过程 系统提供的存储过程系统存储过程的名字都以系统提供的存储过程系统存储过程的名字都以“sp_sp_”为前缀为前缀例:例:sp_bindefault sp_bindefault,sp_bindrule sp_bindrule,sp_help sp_help,sp_helpdb,sp_helpindex sp_helpdb,sp_helpindex 等等q用户定义的存储过程用户定义的存储过程 用户定义的存储
4、过程是由用户为完成某一特定功能而编写用户定义的存储过程是由用户为完成某一特定功能而编写的存储过程。存储在创建时的数据库中。的存储过程。存储在创建时的数据库中。q扩展存储过程:扩展存储过程:扩展存储过程是用来调用操作系统提供的功能。扩展存储过程是用来调用操作系统提供的功能。第5页,共69页,编辑于2022年,星期六2023/1/185系系统统存存储过储过程程说说明明sp_databases列出服列出服务务器上的所有数据器上的所有数据库库。sp_helpdb报报告有关指定数据告有关指定数据库库或所有数据或所有数据库库的信息的信息sp_renamedb更改数据更改数据库库的名称的名称sp_table
5、s返回当前返回当前环环境下可境下可查询查询的的对对象的列表象的列表sp_columns回某个表列的信息回某个表列的信息sp_help查查看某个表的所有信息看某个表的所有信息sp_helpconstraint查查看某个表的看某个表的约约束束sp_helpindex查查看某个表的索引看某个表的索引sp_stored_procedures列出当前列出当前环环境中的所有存境中的所有存储过储过程。程。sp_password添加或修改登添加或修改登录帐户录帐户的密的密码码。sp_helptext显显示默示默认值认值、未加密的存、未加密的存储过储过程、用程、用户户定定义义的存的存储过储过程、触程、触发发器或
6、器或视图视图的的实际实际文本。文本。第6页,共69页,编辑于2022年,星期六2023/1/186EXEC sp_databasesEXEC sp_renamedb Northwind,Northwind1USE stuDBGOEXEC sp_tablesEXEC sp_columns stuInfo EXEC sp_help stuInfoEXEC sp_helpconstraint stuInfoEXEC sp_helpindex stuMarksEXEC sp_helptext view_stuInfo_stuMarks EXEC sp_stored_procedures 修改数据库的名
7、称(单用户访问)列出当前系统中的数据库当前数据库中查询的对象的列表返回某个表列的信息查看表stuInfo的信息查看表stuInfo的约束查看表stuMarks的索引查看视图的语句文本查看当前数据库中的存储过程演示:常用的存储过程第7页,共69页,编辑于2022年,星期六2023/1/18710.2 10.2 建立和执行存储过程建立和执行存储过程简单存储过程类似于将一组简单存储过程类似于将一组SQL语句起个名字,然后就语句起个名字,然后就可以在需要时反复调用。复杂一些的则要有输入和输出参数。可以在需要时反复调用。复杂一些的则要有输入和输出参数。1021创建和执行简单存储过程创建和执行简单存储过程
8、创建存储过程的基本语法如下:创建存储过程的基本语法如下:CREATEPROC存储过程名存储过程名WITHENCRYPTIONWITHRECOMPILEASSQL语句语句q其中各参数如下:其中各参数如下:WITHENCRYPTION:对存储过程进行:对存储过程进行加密加密。WITHRECOMPILE:对存储过程:对存储过程重新编译重新编译。第8页,共69页,编辑于2022年,星期六2023/1/188【例【例10.1】创建一个无参数的存储过程,在】创建一个无参数的存储过程,在SALES数据库中数据库中,创建存储过程创建存储过程xs,查询查询销售编号销售编号,商品名称商品名称,数量。数量。CREA
9、TEPROCEDURExsASSELECT销售编号销售编号,商品名称商品名称,sell.数量数量as销售数量销售数量FROMgoods,sellWHEREgoods.商品编号商品编号=sell.商品编号商品编号第9页,共69页,编辑于2022年,星期六2023/1/1891022存储过程的执行存储过程的执行q执行存储过程的基本语法如下:执行存储过程的基本语法如下:EXECUTE存储过程名存储过程名q同时同时EXECUTE命令除了可以执行存储过程外还可以执行存命令除了可以执行存储过程外还可以执行存放放Transact-SQL语句的字符串变量,或直接执行语句的字符串变量,或直接执行Transact
10、-SQL语句字符串。此时语句字符串。此时EXECUTE语句的语法格语句的语法格式如下。式如下。EXECUTE(字符串变量字符串变量|NSQL语句字符串语句字符串+.nq其中其中“字符串变量字符串变量”是局部字符串变量名,最大值为服务器是局部字符串变量名,最大值为服务器的可用内存。的可用内存。NSQL语句字符串语句字符串的语句字符串是一个由的语句字符串是一个由SQL语句构成的字符串常量。如果包含语句构成的字符串常量。如果包含N,则该字符串将解,则该字符串将解释为释为nvarchar数据类型。数据类型。EXECxs第10页,共69页,编辑于2022年,星期六2023/1/1810【例【例10.2】
11、建立一个批处理,查询相应表中的信息。】建立一个批处理,查询相应表中的信息。DECLAREtab_namevarchar(20)SETtab_name=xsEXECUTE(SELECT*FROM+tab_name)第11页,共69页,编辑于2022年,星期六2023/1/18111023带输入参数的存储过程带输入参数的存储过程1建立存储过程建立存储过程一个存储过程可以带一个或多个参数,输入参数是指由调用程序一个存储过程可以带一个或多个参数,输入参数是指由调用程序向存储过程传递的参数,它们在创建存储过程语句中被定义,在执行向存储过程传递的参数,它们在创建存储过程语句中被定义,在执行存储过程中给出相
12、应的参数值。存储过程中给出相应的参数值。q声明带输入参数的存储过程的语法格式如下:声明带输入参数的存储过程的语法格式如下:CREATEPROCEDURE存储过程名存储过程名参数名参数名数据类型数据类型=默认值默认值,nWITHENCRYPTIONWITHRECOMPILEASSQL语句语句第12页,共69页,编辑于2022年,星期六2023/1/1812q其中其中“参数名参数名”和定义局部变量一样,必须以符和定义局部变量一样,必须以符号号为前缀,要指定数据类型,多个参数定义要用为前缀,要指定数据类型,多个参数定义要用“,”隔开。在执行存储过程时该参数将由指定隔开。在执行存储过程时该参数将由指定
13、的的参数值参数值来代替,如果执行时未提供该参数的参来代替,如果执行时未提供该参数的参数值,则使用时须数值,则使用时须定义默认值定义默认值(默认值可以是常(默认值可以是常量或空值量或空值null),否则将产生错误。),否则将产生错误。第13页,共69页,编辑于2022年,星期六2023/1/1813【例【例10.310.3】创建一个带输入参数的存储过程】创建一个带输入参数的存储过程PROC_GOODS,PROC_GOODS,查询指定员工所进商品信查询指定员工所进商品信息息CREATEPROCproc_goods员工编号员工编号char(6)=1001AsSelect商品编号商品编号,商品名称商品
14、名称,生产厂商生产厂商,进货价进货价,零售零售价价,数量数量,进货时间进货时间fromgoodsWhere进货员工编号进货员工编号=员工编号员工编号 第14页,共69页,编辑于2022年,星期六2023/1/18142执行存储过程执行存储过程在执行存储过程的语句中,有两种方式传递参数值,分别是在执行存储过程的语句中,有两种方式传递参数值,分别是使用使用参数名参数名传递参数值和按传递参数值和按参数位置参数位置传递参数值传递参数值。q使用参数名传递参数值,是通过语句使用参数名传递参数值,是通过语句“参数名参数名=参数值参数值”给参数传给参数传递值。当存储过程含有多个输入参数时,对数值可以按任意顺递
15、值。当存储过程含有多个输入参数时,对数值可以按任意顺序给出,对于允许空值和具有默认值的输入参数可以不给参数序给出,对于允许空值和具有默认值的输入参数可以不给参数值,其语法格式为:值,其语法格式为:EXECUTE存储过程名存储过程名参数名参数名=参数值参数值,nq按参数位置传递参数值,不显式地给出按参数位置传递参数值,不显式地给出“参数名参数名”,而是按照参数,而是按照参数定义的定义的顺序顺序给出参数值。按位置传递参数时,也可以忽略允许给出参数值。按位置传递参数时,也可以忽略允许为空值和有默认值的参数,但不能因此破坏输入参数的为空值和有默认值的参数,但不能因此破坏输入参数的指定顺指定顺序序。必要
16、时使用关键字。必要时使用关键字“DEFAULT”作为参数值的占位。作为参数值的占位。EXECproc_goods员工编号员工编号=1002或或EXECproc_goods1002第15页,共69页,编辑于2022年,星期六2023/1/181510102 24 4 带输出参数的存储过程带输出参数的存储过程如果我们需要从存储过程中返回一个或多个值,如果我们需要从存储过程中返回一个或多个值,可以通过在创建存储过程的语句中定义输出参数来可以通过在创建存储过程的语句中定义输出参数来实现,为了使用输出参数,需要在创建存储过程的实现,为了使用输出参数,需要在创建存储过程的命令中使用命令中使用OUTPUT关
17、键字。关键字。q声明带输出参数的存储过程的语法格式如下:声明带输出参数的存储过程的语法格式如下:CREATEPROCEDURE存储过程名存储过程名参数名参数名数据类型数据类型VARYING=默认值默认值OUTPUT,nWITHENCRYPTIONWITHRECOMPILEASSQL语句语句第16页,共69页,编辑于2022年,星期六2023/1/1816q注意:注意:OUTPUT变量必须在变量必须在定义存储过程定义存储过程和和使用该使用该变量时都进行定义变量时都进行定义。定义时定义时的参数名和的参数名和调用时调用时的变的变量名不一定相同,不过量名不一定相同,不过数据类型数据类型和和参数的位置参
18、数的位置必须必须匹配。匹配。第17页,共69页,编辑于2022年,星期六2023/1/1817【例【例10.5】创建一个带有输入和输出函数的存储过程】创建一个带有输入和输出函数的存储过程proc_gno,查询指定厂查询指定厂商指定名称的商品对应的商品编号商指定名称的商品对应的商品编号CREATEPROCproc_gno商品名称商品名称varchar(20),生产厂商生产厂商varchar(30),商品编号商品编号intoutputAsSelect商品编号商品编号=商品编号商品编号FromgoodsWhere商品名称商品名称=商品名称商品名称and生产厂商生产厂商=生产厂商生产厂商 第18页,共
19、69页,编辑于2022年,星期六2023/1/1818执行存储过程Declare商品编号商品编号intExecproc_gno打印机打印机,惠普公司惠普公司,商商品编号品编号outputPrint该商品编号为该商品编号为:+cast(商品编号商品编号aschar(6)第19页,共69页,编辑于2022年,星期六2023/1/181910.3 10.3 存储过程的管理与维护存储过程的管理与维护1031查看存储过程的定义信息查看存储过程的定义信息在在SQLServerManagementStudio的的“对象资源管理器对象资源管理器”中,可以在要查看信息的存储中,可以在要查看信息的存储过程上单击鼠
20、标右键,在快捷菜单中选择过程上单击鼠标右键,在快捷菜单中选择“属性属性”,弹出,弹出“存储过程属性存储过程属性”窗口窗口.也可以通过系统存储过程也可以通过系统存储过程sp_helptext查看查看存储过程的存储过程的定义定义;通过;通过sp_help查看存储过程的查看存储过程的参数参数;通过;通过sp_depends查看存储过程的查看存储过程的相关性。相关性。第20页,共69页,编辑于2022年,星期六2023/1/1820【例【例10.7】在】在SQLServerManagementStudio服务器中新建查询,使用系统存储过程,查看例服务器中新建查询,使用系统存储过程,查看例10.5中所创
21、建存储过程的定义、参数和相关性。中所创建存储过程的定义、参数和相关性。EXECUTEsp_helptextproc_gnoEXECUTEsp_helpproc_gnoEXECUTEsp_dependsproc_gno第21页,共69页,编辑于2022年,星期六2023/1/182110103 32 2 存储过程的重编译存储过程的重编译存储过程所采用的执行计划,只在编译时优存储过程所采用的执行计划,只在编译时优化生成,以后便驻留在高速缓存中。当用户对数化生成,以后便驻留在高速缓存中。当用户对数据库新增了索引或其他影响数据库逻辑结构的更据库新增了索引或其他影响数据库逻辑结构的更改后,已编译的存储过
22、程执行计划可能会失去效改后,已编译的存储过程执行计划可能会失去效率。通过对存储过程进行重新编译,可以重新优率。通过对存储过程进行重新编译,可以重新优化存储过程的执行计划。化存储过程的执行计划。qSQLServer为用户提供了为用户提供了3种重新编译的方法。种重新编译的方法。第22页,共69页,编辑于2022年,星期六2023/1/18221在创建存储过程时设定在创建存储过程时设定在创建存储过程时,使用在创建存储过程时,使用WITHRECOMPILE子句时子句时SQLServer不将该存储过程的查询计划保存在缓存中,而是在每次运行不将该存储过程的查询计划保存在缓存中,而是在每次运行时重新编译和优
23、化,并创建新的执行计划。时重新编译和优化,并创建新的执行计划。2在执行存储过程时设定在执行存储过程时设定通过在执行存储过程时设定重新编译,可以让通过在执行存储过程时设定重新编译,可以让SQLServer在在执行存储过程时重新编译该存储过程,这一次执行完成后,新的执行存储过程时重新编译该存储过程,这一次执行完成后,新的执行计划又被保存在缓存中。这样用户就可以根据需要进行重新执行计划又被保存在缓存中。这样用户就可以根据需要进行重新编译。编译。EXEC存储过程名存储过程名RECOMPILE3通过系统存储过程设定重编译通过系统存储过程设定重编译通过系统存储过程通过系统存储过程sp_recompile设
24、定重新编译标记,使存储过程在设定重新编译标记,使存储过程在下次运行时重新编译。下次运行时重新编译。q其语法格式如下:其语法格式如下:EXECsp_recompile数据库对象数据库对象第23页,共69页,编辑于2022年,星期六2023/1/182310103 33 3 修改和删除存储过程修改和删除存储过程1修改存储过程修改存储过程存储过程的修改是由存储过程的修改是由ALTER语句语句来完成的,来完成的,基本语法如下:基本语法如下:ALTERPROCEDURE存储过程名存储过程名WITHENCRYPTIONWITHRECOMPILEASSQL语句语句第24页,共69页,编辑于2022年,星期六
25、2023/1/1824【例【例10.710.7】修改例修改例10.110.1的存储过程的存储过程,对其进行加密对其进行加密alterPROCEDURExsWITHENCRYPTIONASSELECT销售编号销售编号,商品名称商品名称,sell.数量数量as销售数销售数量量FROMgoods,sellWHEREgoods.商品编号商品编号=sell.商品编号商品编号第25页,共69页,编辑于2022年,星期六2023/1/18252删除存储过程删除存储过程存储过程的删除是通过存储过程的删除是通过DROP语句来实现的,语句来实现的,在在SQLServerManagementStudio的的“对象对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 过程 触发器 PPT 讲稿
限制150内