好文档 - 专业文书写作范文服务资料分享网站

存储过程和触发器

天下 分享 时间: 加入收藏 我要投稿 点赞

第7章 存储过程和触发器

7.1 存储过程

7.1.1 存储过程的类型

(1) 系统存储过程 系统存储过程是由系统提供的存储过程,作为命令执行各种操作。

(2) 本地存储过程 本地存储过程是指在用户数据库中创建的存储过程,这种

存储过程完成特定数据库操作任务,其名称不能以sp_为前缀。

(3) 临时存储过程

临时存储过程属于本地存储过程。如果本地存储过程的名称前面有一个“#”,该存储过程就称为局部临时存储过程,这种存储过程只能在一个用户会话中使用。 (4) 远程存储过程

远程存储过程指从远程服务器上调用的存储过程。 (5) 扩展存储过程

在SQL Server环境之外执行的动态链接库称为扩展存储过程,其前缀是sp_。使用时需要先加载到SQL Server系统中,并且按照使用存储过程的方法执行。 7.1.2 用户存储过程的创建与执行

在用户存储过程的定义中不能使用下列对象创建语句: CREATE VIEW CREATE DEFAULT CREATE RULE CREATE PROCEDURE CREATE TRIGGER

1 / 16下载文档可编辑

1.通过SQL命令创建和执行存储过程

如果要通过SQL命令定义一个存储过程查询XSCJ数据库中每个同学各门功课的成绩,然后调用该存储过程步骤如下: 定义如下存储过程 USE XSCJ Go

CREATE PROCEDURE student_grade

AS SELECT XS.学号,XS.姓名,KC.课程名, XS_KC.成绩

FROM XS,XS_KC,KC

WHERE XS.学号=XS_KC.学号 AND XS_KC.课程号=KC.课程号 Go

使用存储过程的优点:

(1) 存储过程在服务器端运行,执行速度快。

(2) 存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。

(3) 确保数据库的安全。使用存储过程可以完成所有数据库操作,并可通过编程方式控制上述操作对数据库信息访问的权限。

(4) 自动完成需要预先执行的任务。存储过程可以在系统启动时自动执行,而不必在系统启动后再进行手工操作,大大方便了用户的使用,可以自动完成一些需要预先执行的任务。 调用存储过程

EXEC student_grade GO

通过上例了解了存储过程的使用,下面介绍创建和执行存储过程的语法格式。 1) 创建存储过程

2 / 16下载文档可编辑

语法格式:

CREATE PROC [ EDURE ] procedure_name [ ; number ] /*定义过程名*/ [ { @parameter data_type } /*定义参数的类型*/ [ VARYING ] [ = default ] [ OUTPUT ] ] /*定义参数的属性*/ [ ,...n1 ]

[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION }]

/*定义存储过程的处理方式*/

[ FOR REPLICATION ]

AS sql_statement [ ...n2 ] /*执行的操作*/ 对于存储过程要注意下列几点:

(1) 用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是在 tempdb 中创建)。

(2) 成功执行 CREATE PROCEDURE语句后,过程名称存储在sysobjects 系统表中,而 CREATE PROCEDURE 语句的文本存储在 syscomments 中。 (3) 自动执行存储过程

SQL Server 启动时可以自动执行一个或多个存储过程。这些存储过程必须由系统管理员在 master 数据库中创建,并在 sysadmin 固定服务器角色下作为后台过程执行。

(4) sql_statement的限制

除了 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL外,其它SET 语句均可在存储过程内使用。

3 / 16下载文档可编辑

(5) 权限.CREATE PROCEDURE的权限默认授予sysadmin固定服务器角色成员,db_owner 和 db_ddladmin 固定数据库角色成员. 2)存储过程的执行

通过EXEC命令可以执行一个已定义的存储过程。 语法格式:

[ EXEC [ UTE ] ]

{ [ @return_status = ]

{ procedure_name [ ;number ] | @procedure_name_var }

[ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } [ ,...n ]

[ WITH RECOMPILE ] }

存储过程的执行要注意下列几点:

(1) 如果存储过程名的前三个字符为 sp_,SQL Server 会在 Master 数据库中寻找该过程。如果没能找到合法的过程名,SQL Server 会寻找所有者名称为 dbo 的过程。

(2) 参数可以通过 value 或 @parameter_name = value 提供。

(3) 执行存储过程时,若语句是批处理中的第一个语句,则不一定要指定EXECUTE 关键字。 3) 举例

(1) 设计简单的存储过程

【例7.1】从XSCJ数据库的三个表中查询,返回学生学号、姓名、课程名、成绩、学分。该存储过程不使用任何参数。 USE XSCJ

4 / 16下载文档可编辑

/*检查是否已存在同名的存储过程,若有,删除。*/ IF EXISTS (SELECT name FROM sysobjects

WHERE name = 'student_info' AND type = 'P')

DROP PROCEDURE student_info GO /*创建存储过程*/ CREATE PROCEDURE student_info

AS SELECT a.学号, 姓名, 课程名, 成绩, 学分 FROM XS a INNER JOIN XS_KC b

ON a.学号 = b.学号 INNER JOIN KC t ON b.课程号= t.课程号 GO (2) 使用带参数的存储过程

【例7.2】从XSCJ数据库的三个表中查询某人指定课程的成绩和学分。该存储过程接受与传递参数精确匹配的值。 USE XSCJ

IF EXISTS (SELECT name FROM sysobjects

WHERE name = 'student_info1' AND type = 'P') DROP PROCEDURE student_info1 GO CREATE PROCEDURE student_info1

@name char (8),@cname char(16)

AS SELECT a.学号, 姓名, 课程名, 成绩, 学分 FROM XS a INNER JOIN XS_KC b

ON a.学号 = b.学号 INNER JOIN KC t ON b.课程号= t.课程号

WHERE a.姓名=@name and t.课程名=@cname GO

5 / 16下载文档可编辑

存储过程和触发器

第7章存储过程和触发器7.1存储过程7.1.1存储过程的类型(1)系统存储过程系统存储过程是由系统提供的存储过程,作为命令执行各种操作。(2)本地存储过程本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操作任务,其名称不能以sp_为前缀。(3)
推荐度:
点击下载文档文档为doc格式
7hfc33ix9q9pg7z7hdvh6c4rp7oypx00srp
领取福利

微信扫码领取福利

微信扫码分享