存储过程、触发器和函数.ppt
第第8章章存储过程、触发器存储过程、触发器本章学习目标本章学习目标掌握存储过程的基本概念、特点和类型掌握存储过程的基本概念、特点和类型掌握存储过程的创建和执行方式掌握存储过程的创建和执行方式掌握存储过程的管理方式掌握存储过程的管理方式掌握触发器的基本概念、特点和类型掌握触发器的基本概念、特点和类型掌握触发器的创建和管理方式掌握触发器的创建和管理方式本章本章主要内容主要内容存储过程概述存储过程概述创建和执行存储过程创建和执行存储过程管理存储过程管理存储过程创建触发器创建触发器管理触发器管理触发器8.1 存储过程概述存储过程概述1.存储过程的定义2.存储过程的特点3.存储过程的类型1.存储过程的定义存储过程的定义存储过程是一组为了完成特定任务的SQL语句 集,是 利 用 SQL Server所 提 供 的Transact-SQL语言所编写的程序。存储过程经编译和优化后存储在数据库服务器中。存储过程可以由应用程序通过一个调用来执行,而且允许用户声明变量。存储过程可以接收和输出参数、返回执行存储过程的状态值。2.存储过程的特点存储过程的特点存储过程允许用户模块化程序设计,大大提高程序的设计效率。存储过程可以强制应用程序的安全性,可以防止SQL嵌入式攻击。由于存储过程在服务器端存储和运行,并且第一次执行后在内存中保留,以后调用时不需要再次从磁盘装载,能够实现更快的执行速度。用户执行存储过程时,只需在客户端通过指明所调用的存储过程的名称来调用存储过程,可大大较少网络通信流量。存储过程具有安全特性和所有权链接,可以执行所有的权限管理。3.存储过程的类型存储过程的类型用户自定义存储过程扩展存储过程系统存储过程。8.2 创建和执行存储过程创建和执行存储过程 1.在图形界面下创建存储过程2.用Transact-SQL语句创建不带参数的存储过程3.用Transact-SQL语句创建带参数的存储过程4.在图形界面下执行存储过程5.使用Transact-SQL语句执行存储过程1.在图形界面下创建存储过程在图形界面下创建存储过程2.用用Transact-SQL语句创建不带参语句创建不带参数的存储过程数的存储过程 语法:CREATEPROCEDUREprocedure_nameASsql_statement【例8-1】CREATEPROCEDUREhotel_proc2ASSELECT身份证号,姓名,电话FROM客户信息3.用用Transact-SQL语句创建带参数语句创建带参数的存储过程的存储过程 语法:CREATEPROCEDUREprocedure_name;numberparameterdata_typeVARYING=defaultOUTPUT,.nWITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTIONFORREPLICATIONASsql_statement.n【例8-2】CREATEPROCEDUREhotel_proc3namevarchar(12)ASSELECT*FROM客户信息WHERE姓名=name4.在图形界面下执行存储过程在图形界面下执行存储过程5.使用使用Transact-SQL语句执行存储语句执行存储过程过程EXECUTEprocedure_name【例8-4】DECLAREtempvarchar(12)SETtemp=李铭EXECUTEhotel_proc3temp【例例8-3】创建一名为创建一名为hotel_proc4的存储过程,实现前的存储过程,实现前n个自然数的求个自然数的求和功能,并使得该存储过程在每次执行时都被重新编译,且要求对其原和功能,并使得该存储过程在每次执行时都被重新编译,且要求对其原始始Transact-SQL语句进行加密。语句进行加密。CREATEPROCEDUREhotel_proc4inint,sumintOUTPUTWITHRECOMPILE,ENCRYPTIONASDECLAREiintDECLAREsintSETi=1SETs=0WHILEi=inBEGINSETs=s+iSETi=i+1ENDSETsum=s【例8-5】执行例8-3创建的存储过程hotel_proc4。DECLAREsintEXECUTEhotel_proc4100,sOUTPUTPRINT1+2+.+99+100=+str(s)8.3管理存储过程管理存储过程1.使用“对象资源管理器”查看存储过程2.使用系统存储过程查看存储过程3.使用“对象资源管理器”修改存储过程4.使用Transact-SQL语句修改存储过程5.使用“对象资源管理器”删除存储过程6.使用Transact-SQL语句删除存储过程1、使用、使用“对象资源管理器对象资源管理器”查看存储过查看存储过程程 2、使用系统存储过程查看存储过程、使用系统存储过程查看存储过程用 户 可 以 先 用 系 统 存 储 过 程sp_stored_procedures列出当前环境中所有的存储过程,然后使用另一个系统存储过程sp_helptext查看某存储过程的正文信息。3、使用、使用“对象资源管理器对象资源管理器”修改存修改存储过程储过程4、使用、使用Transact-SQL语句修改存语句修改存储过程储过程ALTERPROCEDUREprocedure_name;numberparameterdata_typeVARYING=defaultOUTPUT,.nWITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTIONFORREPLICATIONASsql_statement.n5、使用、使用“对象资源管理器对象资源管理器”删除存删除存储过程储过程6、使用、使用Transact-SQL语句删除存语句删除存储过程储过程DROPPROCEDUREprocedure_name,number8.4创建和管理触发器创建和管理触发器 1.触发器定义触发器定义2.触发器的特点触发器的特点3.触发器的分类触发器的分类4.创建创建DML触发器触发器5.创建创建DDL触发器触发器 6.查看触发器查看触发器7.修改修改DML触发器触发器 8.修改修改DDL触发器触发器9.重命名触发器重命名触发器 10.删除删除DML触发器触发器11.删除删除DDL触发器触发器12.禁用启用触发器禁用启用触发器1、触发器定义、触发器定义l触发器是一种特殊的存储过程,它包括了大量的Transact-SQL语句。l但是触发器又与一般的存储过程有着显著的区别,一般的储过程可以由用户直接调用执行,但是触发器不能被直接调用执行,它只能由事件触发而自动执行。2、触发器的特点触发器的特点触发器是自动执行的,当用户对表中数据作了某些操作之后立即被触发。触发器可通过数据库中的相关表实现级联更改,实现多个表之间数据的一致性和完整性。触发器可以强制比用CHECK约束定义的约束更为复杂的约束。与CHECK约束不同,触发器可以引用其它表中的列。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。3、触发器的分类触发器的分类lDML触发器lDDL触发器4、创建、创建DML触发器触发器CREATETRIGGERschema_name.trigger_nameONtable|viewWITHENCRYPTIONFOR|AFTER|INSTEADOFINSERT,UPDATE,DELETEWITHAPPENDNOTFORREPLICATIONASsql_statement;,.n|EXTERNALNAME【例8-10】创建名为hotel_trig1的INSERT触发器,当用户对数据库hotel的客户信息表进行INSERT操作时被触发,返回受影响的行数信息。(1)编写创建触发器hotel_trig1的语句代码如下:CREATETRIGGERhotel_trig1ON客户信息FORINSERTASPRINT插入了一条客户记录(2)可以触发该触发器的INSERT语句如下:INSERTINTO客户信息王蒙【例8-11】创建名为hotel_trig2的UPDATE触发器,防止用户修改客户信息表中的“姓名”列。(1)编写创建触发器hotel_trig2的语句代码如下:CREATETRIGGERhotel_trig2ON客户信息FORUPDATEASIFupdate(姓名)BEGINraiserror(不能修改姓名,16,10)ROLLBACKtransactionEND(2)可以触发该触发器的UPDATE语句如下:UPDATE客户信息SET姓名=王鹏WHERE姓名=王蒙5、创建、创建DDL触发器触发器CREATETRIGGERtrigger_nameONALLSERVER|DATABASEWITHENCRYPTIONFOR|AFTERevent_type|event_group,.nASsql_statement;,.n|EXTERNALNAME;【例8-12】创建名为hotel_trig3的DDL触发器,阻止删除数据库中的任何表。(1)编写创建触发器hotel_trig3的语句代码如下:CREATETRIGGERhotel_trig3ONDATABASEFORDROP_TABLEASPRINT该触发器禁止删除数据库中的表,如果确实要删除表,请先禁用该触发器!ROLLBACK;(2)触发该触发器的DROPTABLE语句如下:DROPTABLE业务记录6、查看触发器查看触发器sp_helptrigger_name:用于查看触发器的名称、属性、类型、创建时间等一般信息。sp_helptexttrigger_name:用于查看触发器的正文信息。sp_dependstrigger_name|table_name:用于查看触发器所引用的表或表所涉及的触发器。7、修改修改DML触发器触发器 ALTERTRIGGERschema_name.trigger_nameONtable|viewWITHENCRYPTIONFOR|AFTER|INSTEADOFDELETE,INSERT,UPDATENOTFORREPLICATIONASsql_statement;.n|EXTERNALNAME;8、修改修改DDL触发器触发器ALTERTRIGGERtrigger_nameONDATABASE|ALLSERVERWITHENCRYPTIONFOR|AFTERevent_type,.n|event_groupASsql_statement;|EXTERNALNAME;9、重命名触发器、重命名触发器sp_renameold_name,new_name10、删除删除DML触发器触发器DROPTRIGGERschema_name.trigger_name,.n;11、触发器定义、触发器定义DROPTRIGGERtrigger_name,.nONDATABASE|ALLSERVER;12、禁用启用触发器禁用启用触发器禁用DISABLETRIGGERschema_name.trigger_name,.n|ALLONobject_name|DATABASE|ALLSERVER;启用ENABLETRIGGERschema_name.trigger_name,.n|ALLONobject_name|DATABASE|ALLSERVER;【例8-17】禁用数据库hotel中“客户信息”表的触发器hotel_trig4,语句如下:DISABLETRIGGERhotel_trig4ON客户信息【例8-18】启用数据库hotel中“客户信息”表的触发器hotel_trig4,语句如下:ENABLETRIGGERhotel_trig4ON客户信息8.6 小结小结 存储过程的基本概念、类型和特点,以及如何创建、执行、管理存储过程;触发器的概念、类型和特点,以及如何创建、管理触发器;