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