存储过程与触发器综合概述_第1页
存储过程与触发器综合概述_第2页
存储过程与触发器综合概述_第3页
存储过程与触发器综合概述_第4页
存储过程与触发器综合概述_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章存储过程与触发器本章学习目标l理解存储过程和触发器的作用l

熟练创建和管理存储过程及触发器l

灵活运用存储过程和触发器提高系统开发效率

8.1存储过程

8.1.1存储过程基础知识

1.存储过程简介

存储过程是存储在服务器上的由SQL语句和控制流语句组成的一个预编译集合。存储过程划分为系统存储过程以及用户存储过程。一个存储过程可以作为一个独立的单元进行处理。在SQLServer中可以通过存储过程来完成很多管理任务,利用一些常用的系统存储过程可以很方便的查看、操作数据库对象。系统存储过程的命名通常以”sp_”作为前缀,并且存储于Master数据库中,如果用户拥有足够的权限,就可以在任何数据库中调用这些存储过程。

存储过程提供了一种封装某一个需要重复执行任务的方法。一旦定义了一个存储过程之后,在应用程序中就可以对其进行调用。在存储过程中,不仅可以包含程序流、逻辑以及对数据库的查询,而且也可以接受参数、输出参数、返回单个或多个结果集。所以通过设计自定义用户存储过程,用户可以使其实现强大的编程功能。

使用存储过程可以比单独的SQL语句完成更为复杂的功能,并且系统会对存储过程中的SQL语句进行了预编译处理,使得执行速度有了大幅度的提升。存储过程被第一次调用后,会保存在高速缓冲区中,这样再次执行同一个存储过程时,会提高了重复调用的效率。在实际应用中,可以将复杂的商业规则封装在存储过程中,从而提高程序语句的利用率。

2.存储过程的优点存储过程一旦执行一次后,其执行的计划就会驻留在计算机的高速缓冲存储器中。其后对同一个存储过程的调用就可以直接利用编译后在高速缓存中的二进制形式来完成操作。可以在单个存储过程中执行一系列SQL语句,因而可以用于设计、封装企业的功能模块。应用程序使用相同的存储过程进行操作,确保了在数据访问、操纵的一致性。可以在当前的存储过程内部引用其它存储过程,这样可以将复杂语句进行简化。提供了一种数据库访问的途径,只需要用户拥有执行存储过程的权限,那么通过使用存储过程就可以完成对数据库的各种操作,如添加数据、修改数据、删除数据等,而不需要考虑用户是否拥有存储过程所处理的数据对象的访问权限。3.使用存储过程的注意事项在命名自定义存储过程时避免与系统存储过程名相同。存储过程最多能够支持32层的嵌套。命名存储过程中的标识符时,长度不能超过128个字符。存储过程中参数的个数不能超过2100。8.1.2创建和执行存储过程

在SQLServer中,既可以通过企业管理器,也可以通过使用CREATEPROCEDRUE语句的方式来创建存储过程。

1.使用企业管理器创建存储过程

步骤:

①在企业管理器中,展开服务器组、服务器节点、数据库节点。

②选择某一个数据库并在该节点上点击鼠标右键,选择【新建】菜单下的【存储过程】级联菜单,将弹出如图8-1所示的对话框。图8-1新建存储过程对话框③在【存储过程属性】对话框中的【文本】编辑框中,对[OWNER]以及[PROCEDURENAME]部分进行修改,分别修改为该存储过程的所有者和存储过程名称,并且输入该存储过程所包含的SQL语句。如图8-2所示为创建了一个用于查询学生信息的存储过程。图8-2用于查询学生信息的存储过程④如果需要验证存储过程中的SQL语句的正确性,可以单击【检查语法】按钮,如果没有语法错误则会弹出如图8-3所示的“语法检查成功”的对话框。图8-3“语法检查成功”的提示对话框⑤当存储过程中没有语法错误后,可以单击【确定】按钮来保存自定义的存储过程。2.使用CREATEPROCEDURE语句来创建存储过程

该语句可以创建永久使用的存储过程,也可以创建局部临时过程、全局临时过程。

语法格式为:

CREATEPROCEDURE存储过程名称[;数值]

[{@参数数据类型}

[VARYING][=参数的默认值][OUTPUT][,…n]

[WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]

[FORREPLICATION]

ASSQL语句[...n]]其中:存储过程名称必须符合标识符命名规则,而且对于数据库以及所有者命名必须唯一。一个完整的命名不能超过128个字符。【例8-1】使用CREATEPROCEDURE语句创建一个名称为proc_bjrs的存储过程,用于检索现有班级及人数。

CREATEPROCEDUREproc_bjrsAS

SELECTDISTINCT(班级表.班级编号),班级表.班级名称,人数=COUNT(学生基本信息表.学号)

FROM学生基本信息表,班级表

WHERE班级表.班级编号=学生基本信息表.班级编号

GROUPBY班级表.班级编号,班级表.班级名称

GO

在查询分析器中执行以上命令后,然后执行该存储过程EXECUTEproc_bjrs,运行结果如图8-4所示。图8-4检检索现有班班级以及人数数【例8-2】设计一个带带有参数的存存储过程,该该参数用于传传递班级编号号,根据该参参数在学生基基本信息表中中检索出某一一个班级中所所有学生的信信息。CREATEPROCEDUREproc_bjcx@bjbhVARCHAR(8)ASSELECT*FROM学生基本本信息表WHERE班班级编号=@bjbh

GO其其中参数@bjbh用于于接收班级编编号,在实际际调用中根据据该参数将会会返回一个结结果集。例如如,EXECUTEproc_bjcx'20051003',将会显示示班级编号为为20051003的学学生信息。运运行结果如图图8-5所示示图8-5用用于传递班班级编号的存存储过程修修改与删删除存储过程程在SQLServer中,可以通通过企业管理理器或SQL语句两种方方式修改或删删除存储过程程。1.使用企业业管理器修改改存储过程①在企业管理理器中,展开开服务器组、、服务器以及及数据库节点点。

②选择择某一个数据据库,展开该该数据库节点点后点击【存存储过程】,,在右侧的窗窗口中将会显显示出存储过过程的列表。。右击需要修修改的存储过过程,在弹出出菜单中选择择【属性】,,弹出存储过过程属性对话话框,如图8-6所示。。图8-6【【存储过程程属性】对话话框③在【存储过过程属性】对对话框的【文文本】编辑框框中修改包含含的SQL语语句。需要注注意的是,存存储过程的名名称不能修改改。

④在检检查了语法的的正确性之后后,可以单击击【确定】按按钮保存修改改并关闭对话话框。2.使用企业业管理器重命命名存储过程程①在企业管理理器中,展开开服务器组、、服务器以及及数据库节点点。

②选择择某一个数据据库,展开该该数据库节点点后点击【存存储过程】,,在右侧的窗窗口中将会显显示出存储过过程的列表。。右击需要重重命名的存储储过程,并选选择弹出菜单单中的【重命命名】命令,,如图8-7所示。图8-7弹弹出菜单中中的【重命名名】命令③重新输入存存储过程的名名称后,按下下回车键完成成修改。3.使用ALTERPROCEDURE语句句修改存储过过程ALTERPROCEDURE语语句可以对数数据库中已有有的存储过程程进行修该,,但不会更改改权限,也不不影响相关的的存储过程或或触发器。该该语句的语法法格式为:ALTERPROCEDURE存储过过程名称[;数值][{@参数数数据类型型}[VARYING][=参数的的默认值][OUTPUT][,…n][WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}][FORREPLICATION]ASSQL语句[...n]]

其中中,存储过程程名称为数据据库中已经存存在的过程名名,语法中的的常用选项与与CREATEPROCEDURE语句一致致。【例8-3】修改已经创创建的存储过过程proc_bjcx及其功能,,将其修改为为可以根据系系部编号来查查询某一个系系部中所有学学生的信息。。修改后将存存储过程名称称重命名为proc_xbcx。在在查询分析析器中运行如如下命令,即即可完成重命命名:

ALTERPROCEDUREproc_bjcx@xbbhVARCHAR(2)

ASSELECT*FROM学学生基本信息息表WHERE班级编编号IN(SELECT班级编编号FROM班级表表WHERE系部编编号=@xbbh)GOSP_RENAME'proc_bjcx','proc_xbcx'

GO使用SP_RENAME可以重新命命名一个现有有的存储过程程。SP_RENAME的语法格式式为:

SP_RENAME原原名称,新新名称。完完成修改后后查询系部编编号为’01’的学生信信息。

EXECproc_xbcx'01'4.使用企业业管理器删除除存储过程①在企业管理理器中,展开开服务器组、、服务器以及及数据库节点点。

②选择择某一个数据据库,展开该该数据库后点点击【存储过过程】,在右右侧的窗口中中显示出存储储过程的列表表。右击需要要删除的存储储过程,并在在弹出菜单中中选择【删除除】命令,将将弹出【除去去对象】对话话框,如图8-8所示。。

③在【除除去对象】对对话框中单击击【全部除去去】按钮将会会完成对存储储过程的删除除操作。图8-8【【除去对象象】对话框5.使用DROPPROCEDURE语句删删除存储过程程使用DROPPROCEDURE语句可以从从当前的数据据库中删除一一个或多个存存储过程。DROPPROCEDURE语句句的语法格式式为:

DROPPROCEDURE{存存储过程名名称}[,...n]

【例8-4】同时删删除当前数据据库中的两个个存储过程,,proc_a和proc_b。在在查询分析析器中运行如如下命令,即即可完成删除除操作:DROPPROCEDUREproc_a,proc_bGO8.2触触发器触触发器及及其作用1.触发器简简介触发器属于一一种特殊的存存储过程,可可以在其中包包含复杂的SQL语句。。触发器与存存储过程的区区别在于触发发器能够自动动执行并且不不含有参数。。通常可以在在触发器内编编写一段自动动执行的程序序,用于保证证数据操作的的完整性,从从而扩展了对对默认值、约约束和规则的的完整性检查查。对表进行行包括添加数数据、删除数数据、更新数数据中的一种种或多种操作作时,触发器器就会自动执执行。触触发器可可以划分为三三种类别:INSERT触发器、DELETE触发器、UPDATE触发器。这这三种触发器器分别在发生生数据的添加加、删除、修修改行为时自自动执行。2.触发器的的优点触发器有助于于在添加、更更新或删除表表中的记录时时保留表之间间已定义的关关系。触发器可以自自动调用,当当发生了对数数据所作的任任何修改时,,与之相关的的触发器就会会立刻被激活活。可以完成数据据库中相关表表之间的级联联修改。级联联修改是指为为了保证数据据之间的逻辑辑性以及依赖赖关系,在对对一张表进行行修改的同时时,其他表中中需要进行的的修改能够自自动实现。触发器可以对对需要存储的的数据加以限限制,并且能能够实现比CHECK约约束更为复杂杂的功能。在在CHECK约束中不允允许引用其他他表中的列,,而触发器可可以引用。3.触发方式式触发器的触发发方式可以分分为后触发和和替代触发两两种方式。后后触发:指指能够引发触触发器的修改改操作在完成成之后才执行行触发器的行行为方式。创创建该类触发发器,需要使使用AFTER关键字或或者FOR关关键字。替代触发:指指定执行一个个触发器,而而不是执行SQL语句,,这种替代触触发语句的方方式称为替代代触发方式。。创创建触发发器可以使用企业业管理器以及及CREATETRIGGER语语句两种方式式来创建触发发器。1.使用企业业管理器创建建触发器①打开企业管管理器,在控控制台根目录录下依次展开开服务器组、、服务器节点点、数据库节节点。

②选选择某一个数数据库,并双双击【表】节节点,在右侧侧窗口的列表表中选择其中中的一张表。。

③右击所所选中的表,,在弹出的下下拉菜单中选选择【所有任任务】,并继继续选择级联联菜单中的【【管理触发器器】命令,将将打开图8-9所示的【【触发器属性性】对话框。。图8-9【【触发器属属性】对话框框④在【触发器器属性】对话话框的文本框框中,将[TRIGGERNAME]修改为为新建触发器器的名称,并并输入触发器器所包含的SQL语句。。

⑤通过点点击【检查语语法】按钮来来判断触发器器的语法是否否正确,最后后,点击【确确定】按钮保保存新建的触触发器。2.使用CREATETRIGGER语句创创建触发器CREATETRIGGER语句句的部分语法法格式:CREATETRIGGER触触发器名称ON{表表名|视视图名}

[WITHENCRYPTION]FOR|AFTER|INSTEADOF[DELETE][,][INSERT][,][UPDATE]

ASSQL语句[...n]其中:触发器名称必必须符合合标识符命名名规则,并且且在同一个数数据库中触发发器的名称不不允许重复。。触发器名称称中可以省略略所有者名称称。表名或视图名名称是指指建立触发器器所依赖的对对象。也可以以称为触发器器表或触发器器视图。WITHENCRYPTION该该选项的的作用为对触触发器中所包包含的SQL语句进行加加密。FOR或AFTER代代表后触发发方式,即当当满足所有的的引用级联操操作和约束检检查后并且完完成了SQL语句中指指定的所有操操作后,指定定的触发器才才会被执行。。在视图上不不允许采用后后触发方式。。INSTEADOF表表示替代代触发方式,,每一个INSERT、、UPDATE、DELETE语语句只能定义义一个INSTEADOF触触发器。DELETE、INSERT、UPDATE三三个选项项中应该至少少选择其一,,用于表示在在表或视图上上执行了哪一一类的操作时时会将触发器器激活。SQL语句为为触发器器中包含的条条件以及需要要执行的操作作。在执行触发器器时,系统会会自动创建两两张临时表INSERTED、DELETED,这两张表表的结构与触触发器所依赖赖的表类似,,用于保存在在用户操作过过程中被插入入或被删除的的数据。每一一个触发器在在执行过程中中都会产生与与之相关的上上述两张临时时表,并且在在执行结束后后,两个临时时表会自动被被系统删除。。对临时表可可以进行查询询操作,如SELECT*FROMDELETED,但是不能能对临时表进进行修改【例8-5】在数据库XSCJ中设设计一个触发发器,该触发发器的作用为为:当在班级级表中删除某某一个班级时时,在学生基基本信息表中中该班级所包包含的学生信信息也全部被被删除。提提示:在此例例中,由于涉涉及到了班级级表的删除操操作,因而需需要设计一个个DELETE类型的触触发器。在在查询分析器器中运行如下下命令:USEXSCJ

GO

CREATETRIGGERdel_bjON班级表AFTERDELETE

ASDELETEFROM学生基本本信息表WHERE班班级编号IN(SELECT班班级编号FROMDELETED)

GO

运行结果果如图8-10所示。图8-10一一个DELETE类类型的触发器器【例8-6】在数据库XSCJ中设设计一个触发发器,该触发发器能够保证证在学生基本本信息表中添添加新的纪录录时,新学生生的班级编号号必须已经存存在于班级表表中。提示:设计计该触发器器有助于实实现学生信信息的完整整性。在此此例中由于于涉及到了了学生基本本信息表中中的添加操操作,因而而需要设计计一个INSERT类型的触触发器。在在查询分分析器中运运行如下命命令:USEXSCJGOCREATETRIGGERinsert_xsON学学生基本信信息表AFTERINSERTASIFEXISTS(SELECT*FROMINSERTEDWHERE班级级编号IN(SELECT班级级编号FROM班班级表))PRINT'添加成功功!'ELSEBEGINPRINT'班级级编号与现现有的班级级不符!'ROLLBACKTRANSACTIONEND运行结果如如图8-11所示。。图8-11一个个INSERT类型型的触发器器创建了触发发器insert_xs之后后,我们可可以添加新新的学生纪纪录进行测测试,例如如:

INSERTINTO学生生基本信息息表(学学号,姓名名,性别,族别,班班级编号)VALUES('000108','王松松涛','男','汉','20081001')由由于“班级级表”中不不存在编号号为20081001的班级级,因而添添加操作将将会被取消消。ROLLBACKTRANSACTION用于回回滚已经完完成的操作作。运行结结果如图8-12所所示。图8-12添加加操作被取取消8.2.4修改改与删除触触发器1.使用企企业管理器器修改触发发器①在控制台台根目录下下依次展开开服务器组组、服务器器节点、数数据库节点点。

②选选择某一个个数据库,,并双击【【表】节点点,在右侧侧窗口的列列表中选择择某一张需需要对其所所建立的触触发器进行行修该的表表。

③右右击所选中中的表,在在弹出的下下拉菜单中中选择【所所有任务】】,并继续续选择级联联菜单中的的【管理触触发器】命命令,将打打开【触发发器】属性性对话框,,如图8-13所示示。

④在在【触发器器属性】对对话框中,,在【名称称】下拉列列表框选择择一个已有有的触发器器,并在【【文本】编编辑框中对对其所包含含的SQL语句进行行修改。图8-13【触发发器】属性性对话框⑤在语法检检查无误的的情况下,,点击【确确定】按钮钮保存修改改。

⑥如如果需要删删除当前触触发器,可可以点击【【删除】按按钮。2.使用ALTERTRIGGER语句修改改触发器ALTERTRIGGER语句与与CREATETRIGGER语句句的语法格格式及其参参数类似,,部分语法法格式为::

ALTERTRIGGER触触发器名称称ON{表表名|视图名名}

[WITHENCRYPTION]FOR|AFTER|INSTEADOF[DELETE][,][INSERT][,][UPDATE]

ASSQL语语句[...n]【例8-7】修改del_bj触发器,,使得在班班级表中删删除某一个个班级时,,不仅在学学生基本信信息表中该该班级所包包含的学生生信息将被被删除,而而且在成绩绩表中与学学生相关的的数据也将将被删除。。

在查询询分析器中中运行如下下命令:ALTERTRIGGERdel_bjON班班级表AFTERDELETE

ASDELETEFROM成成绩表WHERE学号IN(SELECT学号号FROM学生生基本信息息表WHERE班班级编号号IN(SELECT班级级编号FROMDELETED))DELETEFROM学生基基本信息表表WHERE班班级编号IN(SELECT班级级编号FROMDELETED)

运行结结果如图8-14所所示。图8-14修修改del_bj触触发器3.使用DROPTRIGGER语语句删除触触发器移除触发器器时,与触触发器有关关的信息将将从sysobjects和和syscomments系系统表中删删除。可以以通过删除除触发器或或删除表两两种方式移移除触发器器。删除表表时,将除除去所有与与表相关联联的触发器器。DROPTRIGGER语语句的语法法格式为::

DROPTRIGGER触发发器名称[,...n]

触发器器名称为数数据库中现现有的触发发器。可以以指定一个个或多个触触发器名称称来删除一一个或多个个触发器。。【例8-8】删除触触发器del_bj以及insert_xs。。

在查询询分析器中中运行如下下命令:USEXSCJ

GODROPTRIGGERdel_bj,insert_xs

运行结结果如图8-15所所示。图8-15删除除触发器del_bj以及insert_xs本章小结本章学习了了存储过程程与触发器器的相关知知识,存储储过程中可可以将多条条SQL语语句集中在在一起完成成复杂的功功能,从而而用户可以以在不具有有对数据对对象访问的的权限下调调用这些存存储过程完完成的特定定的操作。。触发器可可以帮助用用户完成数数据的验证证功能,从从而能够保保证数据的的一致性、、完整性。。练习与上机机一.选择题题1.下面关关于存储过过程的描述述中哪些是是正确的(()A.自定义义存储过程程与系统存存储过程名名称可以相相同

B..存储过程程最多能够够支持64层的嵌套套

C.命命名存储过过程中的标标识符时,,长度不能能超过256个字符符

D.存存储过程中中参数的个个数不能超超过2100

2..用于创建建存储过程程的SQL语句为(()A.CREATEDATABASEB.CREATETRIGGER

C..CREATEPROCEDURED.CREATETABLE3.用于修修改存储过过程的SQL语句为为()A.ALTERTABLEB.ALTERDATABASEC.ALTERTRIGGERD.ALTERPROCEDURE4.下列对对触发器的的描述中哪哪一个是错错误的())

A..触发器属属于一种特特殊的存储储过程B.触发器器与存储过过程的区别别在于触发发器能够自自动执行并并且不含有有参数C.触发器器有助于在在添加、更更新或删除除表中的记记录时保留留表之间已已定义的关关系

D..既可以对对INSERTED、DELETED临时表进进行查询,,也可以进进行修改二.填空题题1.一个存存储过程的的名称不能能超过_______个字符符。

2..使用_______语句可可以对存储储过程进行行重命名。。

3.触触发器有_______、_______触发发方式。4.用_________语句可以以删除触发发器。5.触发器器可以划分分为三种类类别____________、____________、____________。。三.简答题题1.简述什什么是存储储过程?2.简要要说明存储储过程的语语法格式??

3.简简述什么是是触发器??

4.简简要说明触触发器的语语法格式??项目实训1.创建一一个存储过过程,该存存储过程能能够实现根根据系部的的编号查询询出系部中中男生、女女生的人数数。

2..创建一个个INSERT触发发器,该触触发器能够够在向成绩绩表中添加加数据时,,自动判断断学号、课课程编号、、成绩是否否合法,如如果非法则则对插入操操作进行回回滚。3.修改存存储过程的的名字。4.建立立一个存储储过程,来来修改student数据库库的c、sc两张表表,当用户户修改c表表中的cno后,修修改cno表中对应应的数据。。9、静夜四无邻邻,荒居旧业业贫。。12月-2212月-22Friday,December23,202210、雨中黄叶叶树,灯下下白头人。。。23:43:2423:43:2423:4312/23/202211:43:24PM11、以我独沈沈久,愧君君相见频。。。12月-2223:43:2423:43Dec-2223-Dec-2212、故故人人江江海海别别,,几几度度隔隔山山川川。。。。23:43:2423:43:2423:43Friday,December23,202213、乍乍见见翻翻疑疑梦梦,,相相悲悲各各问问年年。。。。12月月-2212月月-2223:43:2423:43:24December23,202214、他乡乡生白白发,,旧国国见青青山。。。23十十二二月202211:43:24下下午午23:43:2412月月-2215、比不不了得得就不不比,,得不不到的的就不不要。。。。十二月月2211:43下下午12月月-2223:43December23,202216、行动出出成果,,工作出出财富。。。2022/12/2323:43:2423:43:2423December202217、做前,能够够环视四周;;做时,你只只能或者最好好沿着以脚为为起点的射线线向前。。11:43:24下午午11:43下下午23:43:2412月-229、没有有失败败,只只有暂暂时停停止成成功!!。12月月-2212月月-22Friday,December23,202210、很多多事情情努力力了未未必有有结果果,但但是不不努力力却什什么改改变也也没有有。。。23:43:2423:43:2423:4312/23/202211:43:24PM11、成功就是是日复一日日那一点点点小小努力力的积累。。。12月-2223:43:2423:43Dec-2223-Dec-2212、世间成事事,不求其其绝对圆满

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论