1
数据库技术及应用
1.10.3.1 7.3.1 存储过程的概念
7.3.1 存储过程的概念

1.存储过程的定义

存储过程是一组为了完成特定功能的SQL语句集,经编译和优化后存储在数据库中的子程序。用户通过指定存储过程的名字并给出参数(如果存储过程带有参数)来执行。

存储过程是独立存在于表之外的数据库对象。可以由客户调用,也可以从另一个过程或触发器中调用,存储过程的参数可以被传递和返回,存储过程的出错代码也可以被检验。

使用存储过程有以下优点:

(1)存储过程在服务器端运行,执行速度快。

(2)存储过程执行一次后,就生成了执行计划,驻留在高速缓冲存储器中,以后每次调用即可,提高了系统的性能。

(3)确保数据库的安全。使用存储过程可以完成所有数据库操作,且可以通过编程方式控制上述操作对数据库信息访问的权限。

(4)自动完成需要预先执行的任务或者预定的功能。存储过程可以在系统启动时自动执行,完成一些需要预先执行的任务,而不必在系统启动后再进行手工操作,方便了用户的使用。

2.存储过程的类型

在SQL Server2008中,存储过程有两种类型,即TransacT-SQL和CLR。

1)TransacT-SQL

TransacT-SQL存储过程是指保存的TransacT-SQL语句集合,可以接受和返回用户提供的参数。例如,存储过程中可能包含根据客户端应用程序提供的信息在一个或多个表中插入新行所需的语句。存储过程也可能从数据库向客户端应用程序返回数据。例如,电子商务Web应用程序可能使用存储过程根据联机用户指定的搜索条件返回有关特定产品的信息。

2)CLR

CLR存储过程是指对Microsoft.NETFramework公共语言运行时(CLR)方法的引用,可以接受和返回用户提供的参数。它们在.NETFramework程序集中是作为类的公共静态方法实现的。

本节主要介绍TransacT-SQL存储过程。TransacT-SQL存储过程分为两类:系统提供的存储过程(系统存储过程)和用户自定义的存储过程。

系统存储过程定义在master数据库中并以sp_为前缀,例如,常用于显示系统对象信息的sp_help存储过程,为检索系统表的信息提供了方便、快捷的方法。尽管这些系统存储过程被放在master数据库中,但是仍可以在其他数据库中对其进行调用,调用时不必在存储过程名前加上数据库名,而且当创建一个新数据库时,一些系统存储过程会在新数据库中被自动创建。

用户自定义存储过程是由用户创建的,并能完成一定的功能,例如,查询用户所需数据信息、数据统计分析等。用户自定义存储过程只能定义在当前数据库中,默认情况下,用户自定义存储过程归数据库所有者拥有,数据库所有者可以把许可授权给其他用户。