目录
存储过程概述
存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
我个人认为存储过程就像是我们在VB中运用到的函数,我们可以在一个固定的位置创建一个具有特定功能的函数,然后将函数放到特定的位置,在我们需要的时候就调用函数,在数据库中我们可以将存储过程存储在固定的位置,当我们需要的时候就可以调用,提高我们的检索效率
为什么要使用存储过程
- 存储过程与其他应用程序共享应用程序逻辑,因而确保了数据访问和修改的一致性。存储过程可以封装业务功能,在存储过程中可以在同一位置改变封装的业务规则和策略。所有的客户端都可以使用相同的存储过程来确保数据访问和修改的一致性。
- 存储过程具有安全性和所有权链接,以及可以附加到它们的证书。用户可以被授予权限来执行存储过程而不必直接对存储过程中引用的对象具有权限
- 存储过程可以减少网络通信流量。用户可以通过发送一个单独的语句实现一个复杂的操作,而不需要在网络上发送几百个Transact-SQL代码,这样减少了在服务器和客户机之间传递的请求的数量
- 存储过程允许模块化程序设计。存储过程一旦创建,以后即可在程序中调用任意多次。这可以改进应用程序的可维护性,并允许应用程序统一访问数据库
- 存储过程提供了安全机制。即使是没有访问存储过程引用的表或视图的权限的用户,也可以被授权执行该存储过程
种类
- 用户自定义存储过程
- 系统存储过程
- 扩展存储过程
语法格式
创建存储过程
CREATE RPOC[EDURE] procedure_name[;number ]
[{ @parameter data_type }
[VARYING][=default ][OUTPUT] ][,..n]
[WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION } ]
AS
sql_statement[...n]
修改存储过程
ALTER RPOC[EDURE] procedure_name[;number ]
[{ @parameter data_type }
[VARYING][=default ][OUTPUT] ]
[,..n]
[WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION } ]
AS
sql_statement[...n]
删除存储过程
DROP PROCEDURE{procedure}[,...n]
设计规则
- 可以引用在同一存储过程中创建的对象,只要引用时已经创建了该对象即可
- 可以在存储过程内引入临时表。如果在存储过程内创建本地临时表,则临时表仅为存储过程而存在;退出该存储过程后,临时表将消失
- 如果执行的存储过程将电泳另一个存储过程,则被调用的存储过程可以访问由第一个存储过程创建的所有对象,包括临时表在内
- 如果执行对远程SQL2008实例进行更改的远程存储过程,则不能回滚这些更改。远程存储过程不参与事务处理
- 存储过程中的参数的最大数目为2100
- 存储过程中的局部变量的最大数目仅受可用内存的限制
- 根据可用内存的不同,存储过程最大可达128MB
不能包括的T-SQL语句
CREATE DEFAULT | CREATE SCHEMA |
---|---|
CREATE AGGREGATE | CREATE RULE |
CREATE或者ALTER FUNCTION | CREATE或者ALTER TRIGGER |
CREATE或者ALTER PROCEDURE | CREATE或者ALTER VIEW |
SET PARSEONLY | SET SHOWPLAN_ALL |
SET SHOWPLAN_TEXT | SET SHOWPLAN_XML |
USE Database_name |
存储过程操作
- 系统存储过程
- 临时存储过程
-
- 局部
-
- 全局
- 嵌套存储过程
- 查看存储过程
总结
存储过程在SQL中很重要,有了存储过程可以让我们变的更加的方便,对于存储过程需要学习的地方还有很多,希望可以多多交流。