一.存储过程概念
存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。 通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句。
存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用。它的参数可以被传递和返回。与应用程序中的函数过程类似,存储过程可以通过名字来调用,而且它们同样有输入参数和输出参数
二.存储过程的分类
SQL SERVER提供了3种类型的存储过程。各类型存储过程如下:
系统存储过程:用来管理SQL SERVER和显示有关数据库和用户的信息的存储过程。
自定义存储过程:用户在SQL SERVER中通过采用SQL语句创建存储过程。
扩展存储过程:通过编程语言(例如,C)创建外部例程,并将这个例程在SQL SERVER中作为存储过程使用。
三.存储过程的优点
(1)存储过程可以嵌套使用,支持代码重用。
(2)存储过程可以接受与使用参数动态执行其中的SQL语句。
(3)存储过程比一般的SQL语句执行速度快。存储过程在创建时已经被编译,每次执行时不需要重新编译。而SQL语句每次执行都需要编译。
(4)存储过程具有安全特性(例如权限)和所有权链接,以及可以附加到它们的证书。用户可以被授予权限来执行存储过程而不必直接对存储过程中引用的对象具有权限。
(5)存储过程允许模块化程序设计。存储过程一旦创建,以后即可在程序中调用任意多次。这可以改进应用程序的可维护性,并允许应用程序统一访问数据库。
(6)存储过程可以减少网络通信流量。一个需要数百行SQL语句代码的操作可以通过一条执行过程代码的语句来执行,而不需要在网络中发送数百行代码。
(7)存储过程可以强制应用程序的安全性。参数化存储过程有助于保护应用程序不受SQL Injection攻击
四.创建存储过程
CREATE PROC [ EDURE ] PROCEDURE_NAME [ ; NUMBER ]
[ { @PARAMETER DATA_TYPE }
[ VARYING ] [ = DEFAULT ] [ OUTPUT ] ] [ ,...N ]
AS SQL_STATEMENT
CREATE PROC语句的参数说明。
CREATE PROCEDURE:关键字,也可以写成CREATE PROC。
PROCEDURE_NAME:创建的存储过程名称。
NUMBER:对存储过程进行分组。 @PARAMETER:存储过程参数,存储过程可以声明一个或多个参数。 DATA_TYPE:参数的数据类型,所有数据类型(包括TEXT、NTEXT和IMAGE)均可以用作存储过程的参数,但是,CURSOR数据类型只能用于OUTPUT参数。
VARYING:可选项,指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化),该关键字仅适用于游标参数。
DEFAUL:可选项,表示为参数设置默认值。
OUTPUT:可选项,表明参数是返回参数,可以将参数值返回给调用的过程。
N :表示可以定义多个参数。
AS:指定存储过程要执行的操作。
SQL_STATEMENT:存储过程中的过程体。
例子:使用CREATE PROCEDURE语句创建一个存储过程,用来根据学生编号查询学生信息
五.执行存储过程
存储过程创建完成后,可以通过EXECUTE执行,可简写为EXEC。
EXEC proname
六.修改和删除存储过程
语法:ALTER PROCEDURE PROCEDURE_NAME(修改)
DROP PROCEDURE PROCEDURE_NAME(删除)