存储过程触发器及自定义函数讲稿.ppt
《存储过程触发器及自定义函数讲稿.ppt》由会员分享,可在线阅读,更多相关《存储过程触发器及自定义函数讲稿.ppt(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、存储过程触发器及自存储过程触发器及自定义函数定义函数第一页,讲稿共五十五页哦第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数存储过程存储过程1触发器触发器2用户自定义函数用户自定义函数3SQL Server 2008实训:实训:T-SQL编程的高级应用编程的高级应用4第二页,讲稿共五十五页哦存储过程存储过程v 存储过程概述 lT-SQL语句进行编程有两种方法:u一种是把T-SQL语句全部写在应用程序中,并存储在本地;u另一种是把部分T-SQL语句编写的程序作为存储过程存储在 SQL Server中,只在本地的应用程序调用存储过程。大多数程序员偏向使用后者。l 存储过程的概
2、念:u存储过程(Stored Procedure)是一组编译好的、存储在服务器上的、能完成特定功能的 T-SQL语句集合,是数据库的一种对象。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第三页,讲稿共五十五页哦存储过程存储过程v 存储过程概述 l 使用存储过程的优点:u存储过程只需编译一次,以后即可多次执行,因此可以提高应用程序的性能。u存储过程一经被创建,可以在程序中被多次调用;并且修改存储过程不会影响应用程序源代码,因此极大地提高了程序的重用性、可维护性、共享性和可移植性。u存储过程存储在服务中,能够减少网络流量。u存储过程可被作为一
3、种安全机制来充分利用。l 存储过程的分类:u系统存储过程。u扩展存储过程。u用户定义的存储过程。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第四页,讲稿共五十五页哦存储过程存储过程v 使用SSMS创建与管理存储过程l使用存储过程模板创建存储过程:u 依次选择“数据库”“BillingSys”“可编程性”“存储过程”节点,右击选择“新建存储过程”命令,打开“查询编辑器”,在“查询编辑器”中出现存储过程的编程模板。如左图所示。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第五页,讲稿共五十
4、五页哦存储过程存储过程v 使用SSMS创建与管理存储过程l 使用存储过程模板创建存储过程:u 修改存储过程的编程模板,插入需要的T-SQL代码。存储过程编程模板。CREATE PROCEDURE -Add the parameters for the stored procedure here =,=ASBEGIN-SET NOCOUNT ON added to prevent extra result sets from-interfering with SELECT statements.SET NOCOUNT ON;-Insert statements for procedure her
5、eSELECT,ENDGO第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第六页,讲稿共五十五页哦存储过程存储过程v 使用SSMS创建与管理存储过程l使用存储过程模板创建存储过程:u 修改存储过程的编程模板,插入需要的T-SQL代码。存储过程编程模板。说明:参数按以下格式包括在尖括号()中:。其中尖括号内是参数的三个元素:参数的名称、该参数的数据类型以及该参数的默认值。parameter_name:列出存储过程或函数中的参数。此字段是只读的。data_type:模板中参数的数据类型。此字段是只读的。若要更改数据类型,请更改模板中的参数。def
6、ault_value:为所选参数指定值。默认值。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第七页,讲稿共五十五页哦存储过程存储过程v 使用SSMS创建与管理存储过程l使用存储过程模板创建存储过程:u 修改存储过程的编程模板,插入需要的T-SQL代码。在存储过程中编写代码。在上述模板代码中:在”CREATE PROCEDURE”行命令中,用户必须自己定义一个存储过程名称,来替代参数部分,即“”部分。“Param1,”、“Param2,”行命令用来指定参数项,如果用户需要为该存储过程指定参数,则按照提示指定参数,例如:Cust_name v
7、archar(20);如果不需要参数,则删除这两条命令。“SELECT Param1,”行命令是为参数赋值。如果没有参数,则删除此条命令。用户从模板的第33行之后(即“-Insert statements for procedure here”之后),插入所要编写的存储过程代码。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第八页,讲稿共五十五页哦存储过程存储过程v 使用SSMS创建与管理存储过程l使用存储过程模板创建存储过程:【例10-1】为计费系统创建一个实现查询单位客户及其联系人的存储过程。CREATE PROCEDURE mypro
8、1 ASBEGIN-SET NOCOUNT ON added to prevent extra result sets from-interfering with SELECT statements.SET NOCOUNT ON;select cid,cname,rname,rtelephone from Customer inner join Relationer on Customer.RID=Relationer.RID where CType=商业 or CType=公众 or CType=大户ENDGO 第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL S
9、erver 2008第九页,讲稿共五十五页哦存储过程存储过程v 使用SSMS创建与管理存储过程l 使用存储过程模板创建存储过程:u 单击工具栏上的“执行”按钮,即可创建该存储过程。u此时,刷新对象资源管理器,重新展开“存储过程”节点,可以看到刚建立的存储过程。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第十页,讲稿共五十五页哦存储过程存储过程v 使用SSMS创建与管理存储过程l 利用对象资源管理器修改存储过程:u 在对象资源管理器窗口中,找到需要修改的存储过程节点,在其上右击选择“修改”命令,打开“查询编辑器”,其中出现要修改的存储过程代
10、码。u 对现有的存储过程进行修改。u 修改完成后,单击工具栏上的“执行”按钮,即可完成存储过程的修改。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第十一页,讲稿共五十五页哦存储过程存储过程v 使用SSMS创建与管理存储过程l 利用对象资源管理器删除存储过程:u在对象资源管理器窗口中,找到需要删除的存储过程节点,右击选择“删除”命令。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第十二页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l创建存储过程:uCREAT
11、E PROCEDUR语句的语法格式如下:CREATE PROCEDURE|PROC;n形参名 数据类型,变参名 数据类型 OUTPUT,WITH ENCRYPTION|RECOMPILEFOR REPLICATION AS第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第十三页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l创建存储过程:uCREATE PROCEDUR语句的参数说明:n:是可选整数,用于对同名的过程分组。形参名:指定过程中的参数。每个参数仅作用于该过程本身,是局部的。变参名:指定作为输出参数支持的
12、结果集。该参数由存储过程动态构造,其内容可能发生改变。仅适用于CURSOR参数。WITH ENCRYPTION:指示SQL Server将CREATE PROCEDURE语句的原始文本转换为模糊格式。WITH RECOMPILE:指示数据库引擎不缓存该过程的计划,该过程在运行时编译。如果指定了FOR REPLICATION,则不能使用此选项。FOR REPLICATION:指定不能在订阅服务器上执行为复制创建的存储过程。使用 FOR REPLICATION选项创建的存储过程可用作存储过程筛选器,且只能在复制过程中执行。如果指定了FOR REPLICATION,则无法声明参数。第十章第十章 存储
13、过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第十四页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l查看存储过程的信息:usp_help 存储过程名称:用于查看存储过程的一般信息,如存储过程的名称、属性、类型和创建时间。usp_helptext 存储过程名称:用于查看存储过程的正文信息。usp_depends 存储过程名称|表名:用于查看指定存储过程所引用的表或者指定的表涉及到的所有存储过程。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第十五页,讲稿共五十五页哦存储过程存储
14、过程v 使用T-SQL语句创建与管理存储过程l修改存储过程:uALTER PROCEDURE语句的语法格式如下:ALTER PROCEDURE|PROC 形参名 数据类型,变参名 数据类型 OUTPUT,WITH ENCRYPTION|RECOMPILEFOR REPLICATION AS第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第十六页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l删除存储过程:uDROP PROCEDURE语句的语法格式如下:DROP PROCEDURE|PROC,n例如,删除数据库Bi
15、llingSys中的存储过程“mypro2”,其代码为:USE BillingSysDROP PROCEDURE mypro2第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第十七页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l 调用存储过程:uEXECUTE语句的语法格式如下:Exec|Execute整型变量=存储过程名,n|存储过程变量名过程参数=参数值|可变参数名 OUTPUT|DEFAULT,nWITH RECOMPILE;第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Se
16、rver 2008第十八页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l 调用存储过程:uEXECUTE语句的参数说明:整型变量:是可选项,代表存储过程的返回状态,该变量在用于EXECUTE语句前,必须已经声明过。n:可选整数,用于对同名的过程分组。过程参数:为存储过程的参数赋值。其中参数名必须和存储过程定义中的相同。OUTPUT:指定该参数为输出参数,该参数在存储过程中定义时也必须使用OUTPUT选项声明。DEFAULT:指明该参数使用默认值。如果该参数定义时没有指定默认值,则不能使用DEFAULT选项。WITH RECOMPILE:使用WITH RECOMPI
17、LE,强制在执行存储过程时重新对其进行编译。而一般情况下,存储过程只有在第一次执行时,系统对其进行编译,并将存储起来,以后执行时直接取出执行计划执行,不再编译。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第十九页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l带参数传递的存储过程举例:【例10-2】为计费系统创建一个实现输入一个有效客户ID,查询其联系人的存储过程。创建该存储过程Query_Relationer代码如下:CREATE PROCEDURE Query_Relationer QueryCID int
18、,-输入的形参 QueryRName varchar(20)OUTPUT-输出的形参ASBEGINSELECT QueryRName=RName FROM Relationer WHERE RID=(SELECT RID FROM Customer WHERE CID=QueryCID AND CStatus=1)ENDGO第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第二十页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l带参数传递的存储过程举例:【例10-2】为计费系统创建一个实现输入一个有效客户ID,查询其
19、联系人的存储过程。如果要查询客户ID为20103530的联系人,调用该存储过程Query_Relationer,代码如下:DECLARE Relationer_name varchar(20),Cust_ID intSET Cust_ID=20103530EXECUTE Query_Relationer Cust_ID,Relationer_name OUTPUTPRINT 客户ID为+convert(char(8),Cust_ID)+的联系人是:+Relationer_nameu如果要查询客户ID为20103531的联系人。只须在下面代码的第二行,将变量Cust_ID的值改为20103531
20、。u调用该存储过程,结果没有任何信息返回。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第二十一页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l 带参数传递的存储过程举例:【例10-2】为计费系统创建一个实现输入一个有效客户ID,查询其联系人的存储过程。改进:前面设计的存储过程Query_Relationer还有待改进。对不存在的客户,提示“不存在”信息。因此,需要对给定的客户ID是否在表中存在给出判断。代码如下:ALTER PROCEDURE Query_Relationer QueryCID int,-输入
21、的形参 QueryRName varchar(20)OUTPUT-输出的形参ASBEGIN -判断用户输入的CID值是否存在,如果不存在,返回“不存在”IF EXISTS(SELECT CID FROM Customer WHERE CID=QueryCID)SELECT QueryRName=RName FROM Relationer WHERE RID=(SELECT RID FROM Customer WHERE CID=QueryCID AND CStatus=1)ELSE SET QueryRName=不存在ENDGO第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义
22、函数SQL Server 2008第二十二页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l带参数传递的存储过程举例:【例10-3】利用存储过程计算阶乘。代码如下:CREATE PROCEDURE factorial -创建存储过程factorial in_num int,out_num float OUTPUTASBEGIN DECLARE i int,f float SET i=1 SET f=1 WHILE i=in_num BEGIN SET f=f*i SET i=i+1 END SET out_num=fENDGO第十章第十章 存储过程、触发器、自定义函
23、数存储过程、触发器、自定义函数SQL Server 2008第二十三页,讲稿共五十五页哦存储过程存储过程v 使用T-SQL语句创建与管理存储过程l 带参数传递的存储过程举例:【例10-3】利用存储过程计算阶乘。求9的阶乘,调用存储过程factorial,代码如下:DECLARE factor floatEXECUTE factorial out_num=factor OUTPUT,in_num=9PRINT factor第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第二十四页,讲稿共五十五页哦触发器触发器v 触发器概念l触发器(Trigge
24、r)是一种特殊的存储过程,它不允许带参数,不能由用户直接通过名称调用,而是由用户的某一动作自动触发。lSQL Server 2008提供三类触发器:uDML触发器:在数据库中发生数据操作(如:INSERT、UPDATE、DELETE)事件时自动执行。uDDL触发器:在服务器或数据库中发生数据定义(如:CREATE、ALTER、DROP)事件时自动执行。u登录触发器:在与SQL Server实例建立用户会话时自动执行,主要用来审核和控制服务器会话。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第二十五页,讲稿共五十五页哦触发器触发器v 创建触
25、发器lDML触发器uDML触发器在用户对表中的数据进行插入(INSERT)、修改(UPDATE)和删除(DELETE)时自动运行。u使用触发器模板创建触发器:在展开SQL Server实例中,依次展开“数据库”“BillingSys”“表”,继续展开要创建触发器的具体表节点,选择“触发器”,右击选择“新建触发器”命令,打开“查询编辑器”,在“查询编辑器”中出现触发器的编程模板。当模板修改完成后,单击窗口工具栏中的“执行”按钮,创建该触发器。第十章第十章 存储过程、触发器、自定义函数存储过程、触发器、自定义函数SQL Server 2008第二十六页,讲稿共五十五页哦触发器触发器v 创建触发器l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 过程 触发器 自定义 函数 讲稿
限制150内