SQL Server应用教程 教学课件 郑阿奇 刘启芬 顾韵华 第6章 存储过程、触发器.pdf
文本预览下载声明
第6章存储过程、触发器
6.1 存储过程
6.2 触发器
6.1.1存储过程的类型
(1) 系统存储过程
系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。系统存储过程
定义在系统数据库master 中,其前缀是sp_,例如常用的显示系统对象信息的sp_help存储
过程,它们为检索系统表的信息提供了方便快捷的方法。
系统存储过程允许系统管理员执行修改系统表的数据库管理任务,可以在任何一个数
据库中执行。常用的系统存储过程,请见附录。
(2) 本地存储过程
本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操
作任务,其名称不能以sp_为前缀。
(3) 临时存储过程
临时存储过程属于本地存储过程。如果本地存储过程的名称前面有一个“#”,该存储
过程就称为局部临时存储过程,这种存储过程只能在一个用户会话中使用。
如果本地存储过程的名称前有两个“##”,该过程就是全局临时存储过程,这种存储
过程可以在所有用户会话中使用。
(4) 远程存储过程
远程存储过程指从远程服务器上调用的存储过程。
(5) 扩展存储过程
在SQL Server2000环境之外执行的动态链接库称为扩展存储过程,其前缀是sp_ 。使用
时需要先加载到SQL Server2000系统中,并且按照使用存储过程的方法执行。
6.1.2用户存储过程的创建与执行
用户存储过程只能定义在当前数据库中,可以使用SQL命令语句或SQL Server的企业
管理器创建存储过程。缺省情况下,用户创建的存储过程归数据库所有者拥有,数据库的
所有者可以把许可授权给其他用户。
1.创建存储过程
语法格式:
CREATE PROC [ EDURE ] procedure_name [ ; number ] /*定义过程名*/
[ { @parameter data_type } /*定义参数的类型*/
[ VARYING ] [ = default ] [ OUTPUT ] ] /*定义参数的属性*/
[ ,...n1 ]
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION }]
/*定义存储过程的处理方式*/
[ FOR REPLICATION ]
AS sql_statement [ ...n2 ] /*执行的操作*/
说明:
参数procedure_name用于指定存储过程名,必须符合标识符规则,且对于数据库及其所
有者必须唯一;创建局部临时过程,可以在procedure_name 前面加一个“#”;创建全局临
时过程,可以在procedure_name 前加“##”。
参数number为可选的整数,用于区分同名的存储过程,以便用一条DROP
PROCEDURE 语句删除一组存储过程;
6.1.2用户存储过程的创建与执行
FOR REPLICATION用于说明不能在订阅服务器上执行为复制创建的存储过程,该选
项不能和WITH RECOMPILE一起使用。参数sql_statement代表过程体包含的T-SQL 语句,
参数n2说明一个存储过程可以包含多条T-SQL 语句。
对于存储过程要注意下列几点:
(1) 用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是在
tempdb 中创建)。
(2) 成功执行CREATE PROCEDURE 语句后,过程名称存储在sysobjects 系统表中,
而CREATE PROCEDURE 语句的文本存储在syscomments 中。
(3) 自动执行存储过程
QL Server 启动时可以自动执行一个或多个存储过程。这些存储过程必须由系统管理
员在master 数据库中创建,并在sysadmin 固定服务器角色下作为后台过程执行。这些过
程不能有任何输入
显示全部