前言
存储过程是一组为了完成特定功能的SQL语句集,其实质上就是一段存储在数据库中的代码,它可以由声明式SQL语句(如CREATE、UPDATE和SELECT等语句)和过程式SQL语句(如IF…THEN…ELSE控制结构语句)组成。这些语句经编译后存储在数据库中。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或者多个结果集以及返回值
芝士
为什么要使用存储过程?
- 良好的封装性
存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。即在存储过程中可以在同一位置改变封装的业务规则和策略,所有的客户端可以使用相同的存储过程来确保数据访问和修改的一致性。 - 存储过程具有安全性和所有权链接,以及可以附加到它们的证书
用户可以被授予权限来执行存储过程而不必直接对存储过程中引用的对象具有权限。 - 存储过程可作为一种安全机制来确保数据库的安全性和数据的完整性
即使是没有访问存储过程引用的表或者视图的权限的用户,也可以被授权执行该存储过程。 - 存储过程允许模块化程序设计
存储过程一旦创建,以后即可在程序中调用任意多次。这可以改进应用程序的可维护性,并允许应用程序统一访问数据库。 - 存储过程可以减少网络通信流量
用户可以通过发送一个单独的语句实现一个复杂的操作,而不需要再网络上发送几百个Transact-SQL代码,这样减少了在服务器和客户机之间传递的请求的额数量。 - 可增强SQL语言的功能和灵活性
存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算 - 高性能
存储过程执行一次后,其执行规划就驻留在高速缓冲存储器中,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行即可,从而提高了系统性能
存储过程种类
- 用户自定义存储过程
- 系统存储过程
- 扩展存储过程
设计存储过程的规则
- 可以引用在同一存储过程中创建的对象,只要引用时已经创建了该对象即可。
- 可以在存储过程内引用临时表。如果在存储过程内创建本地临时表,则临时表仅为该存储过程而存在;退出该存储过程后,临时表将消失
- 如果执行的存储过程将调用另一个存储过程,则被调用的存储过程可以访问由第一个存储过程创建的所有对象,包括临时表在内。
- 如果执行对远程Microsoft SQL Server2008实例进行更改的远程存储过程,则不能回滚这些更改。远程存储过程不参与事务处理。
- 存储过程中的参数的最大数目为2100
- 存储过程中的局部变量的最大数目仅受可用内存的限制
- 根据可用内存的不同,存储过程最大可达128MB
小结
不知大家看懂了没有,反正我是对概念性的东西有点迷,有点尴尬哈~