内容正文:
在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程,它在特定语言事件发生时自动执行。存储过程在运算时生成执行代码,所以,以后对其再运行时其执行效率很高。SQL Server 2005不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。
本章主要介绍存储过程和触发器的概念和分类以及它们的使用方法。
第10章 存储过程和触发器
10.1 存储过程
10.2 触发器
第10章 存储过程和触发器
10.1.1 存储过程概述
存储过程(Stored Procedure)是一组完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行存储过程。
利用SQL Server创建一个应用程序时,SQL是主要的编程语言。使用SQL进行编程,有两种方法。其一是,在本地存储SQL程序,并创建应用程序向SQL Server发送命令来对结果进行处理。其二是,可以把部分用SQL编写的程序作为存储过程存储在SQL Server中,然后创建应用程序来调用存储过程,对数据结果进行处理。
10.1 存储过程
存储过程具有以下优点:
1. 存储过程允许标准组件式编程
2. 存储过程能够实现较快的执行速度
3. 存储过程能够减少网络流量
4. 存储过程可被作为一种安全机制来充分利用
10.1 存储过程
10.1.2 存储过程的类型
在SQL Server 2005中有多种可用的存储过程。在SQL Server 2005中存储过程分为三类:系统提供的存储过程、用户自定义存储过程和扩展存储过程。
1. 系统存储过程
SQL Server 2005中的许多管理活动都是通过一种特殊的存储过程执行的,这种存储过程被称为系统存储过程。系统过程主要存储在master数据库中并以sp_为前缀,并且系统存储过程主要是从系统表中获取信息,从而为数据库系统管理员管理SQL Server提供支持。通过系统存储过程,SQL Server中的许多管理性或信息性的活动(如获取数据库和数据库对象的信息)都可以被顺利有效地完成。
10.1 存储过程
2. 用户自定义的存储过程
用户自定义存储过程是由用户创建并能完成某一特定功能(如查询用户所需数据信息)的存储过程,是封装了可重用代码的SQL语句模块。存储过程可以接受输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言(DDL)和数据操作语言(DML)语句,以及返回输出参数。在SQL Server中,用户自定义的存储过程有两种类型:T-SQL存储过程或CLR存储过程。本书所提到的用户定义的存储过程主要指T-SQL存储过程。
3. 扩展存储过程
扩展存储过程允许使用高级编程语言(例如C)创建应用程序的外部例程,从而使得SQL Server的实例可以动态加载和运行DLL。扩展存储过程直接在SQL Server实例的地址空间中运行。
10.1 存储过程
10.1.3 存储过程的设计规则
使用SQL语句CREATE PROCEDURE可以创建存储过程。其语法格式如下:
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ [ OUT [ PUT ]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ]
[ FOR REPLICATION ]
AS { <sql_statement> [;][ ...n ] | <method_specifier> }
[;]
10.1 存储过程
10.1.4 使用存储过程
当创建存储过程时,需要确定存储过程的三个组成部分:
1) 所有的输入参数以及传给调用者的输出参数。
2) 被执行的针对数据库的操作语句,包括调用其它存储过程的语句。
3) 返回给调用者的状态值,以指明调用是成功还是失败。
在SQL Server 2005中,创建存储过程有两种方法:一种是使用SQL Server Management Studio,另一种是使用T-SQL命令CREATE PROCEDURE。
10.1 存储过程
【例10-2】用SQL命令窗口创建存储过程
CREATE PROCEDURE usp_GetStudent
@number varchar(40)
AS
SE