系统存储过程的目的在于能够方便地从系统表中查询信息,或者完成于更新数据库表相关的管理任务或其他的系统管理任务。
一.存储过程的分类
在存储过程中可以声明变量、执行条件判断语句等其他编程功能。SQL Server中有多种类型的存储过程,总的可以分为一下三类,分别是:系统存储过程,用户存储过程和扩展存储过程。
(1)系统存储过程:系统自身提供的存储过程,可以作为命令执行各种操作。系统存储过程创建并存放于系统数据库master中,一些系统存储过程只能由系统管理员使用,而有些系统存储过程通过授权可以被其他用户所使用。
(2)自定义存储过程:用户使用T-SQL语句编写的、为了实现某一特定业务需求,在用户数据库中编写的T-SQL语句集合,用户存储过程可以接受输入参数、向客户端返回结果和信息、返回输出参数等。
(3)扩展存储过程:扩展存储过程是 SQL Server 实例可以动态加载和运行的 DLL。扩展存储过程是使用 SQL Server 扩展存储过程 API 编写的,可直接在 SQL Server 实例的地址空间中运行。
1.存储过程的好处
(1)重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
(2)提高性能。存储过程在创建的时候就进行了编译,将来使用的时候不用再重新编译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。
(3)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
(4)安全性。参数化的存储过程可以防止SQL注入式的攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
二.创建存储过程
1.创建存储过程
--存储过程的语法
CREATE PROC[EDURE] 存储过程名
@参数1 数据类型 = 默认值,
…… ,
@参数n 数据类型 OUTPUT
AS
SQL语句
GO
--创建存储过程
CREATE PROC CountEmployee
@deptno INT
AS
SELECT COUNT(*) FROM employee WHERE dept_no=@deptno
GO
--调用存储过程
EXEC CountEmployee '20'
2.删除存储过程
DROP PROC CountEmployee
三.修改存储过程
--修改前
CREATE PROC CountEmployee
@deptno INT
AS
SELECT COUNT(*) FROM employee WHERE dept_no=@deptno
GO
--修改后
ALTER PROC CountEmployee
AS
BEGIN
SELECT e_job,COUNT(*) AS Total FROM employee
GROUP BY e_job
END
GO
四.查看存储过程
EXEC sp_help CountEmployee
EXEC sp_helptext CountEmployee
五.重命名存储过程
sp_rename 'old_name','new_name'