存储过程、触发器.ppt
《存储过程、触发器.ppt》由会员分享,可在线阅读,更多相关《存储过程、触发器.ppt(30页珍藏版)》请在三一办公上搜索。
1、第6章 存储过程、触发器,6.1 存储过程,6.2 触发器,存储过程的类型,(1)系统存储过程 系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。系统存储过程定义在系统数据库master中,其前缀是sp_,例如常用的显示系统对象信息的sp_help存储过程,它们为检索系统表的信息提供了方便快捷的方法。系统存储过程允许系统管理员执行修改系统表的数据库管理任务,可以在任何一个数据库中执行。常用的系统存储过程,请见附录。(2)本地存储过程 本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操作任务,其名称不能以sp_为前缀。(3)临时存储过程 临时存储过程属于本地存
2、储过程。如果本地存储过程的名称前面有一个“#”,该存储过程就称为局部临时存储过程,这种存储过程只能在一个用户会话中使用。如果本地存储过程的名称前有两个“#”,该过程就是全局临时存储过程,这种存储过程可以在所有用户会话中使用。(4)远程存储过程 远程存储过程指从远程服务器上调用的存储过程。(5)扩展存储过程 在SQL Server2000环境之外执行的动态链接库称为扩展存储过程,其前缀是sp_。使用时需要先加载到SQL Server2000系统中,并且按照使用存储过程的方法执行。,用户存储过程的创建与执行,用户存储过程只能定义在当前数据库中,可以使用SQL命令语句或SQL Server的企业管理
3、器创建存储过程。缺省情况下,用户创建的存储过程归数据库所有者拥有,数据库的所有者可以把许可授权给其他用户。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/*执行的操作*/说明:参数procedur
4、e_name用于指定存储过程名,必须符合标识符规则,且对于数据库及其所有者必须唯一;创建局部临时过程,可以在 procedure_name 前面加一个“#”;创建全局临时过程,可以在 procedure_name 前加“#”。参数number为可选的整数,用于区分同名的存储过程,以便用一条 DROP PROCEDURE 语句删除一组存储过程;,用户存储过程的创建与执行,FOR REPLICATION用于说明不能在订阅服务器上执行为复制创建的存储过程,该选项不能和 WITH RECOMPILE一起使用。参数sql_statement代表过程体包含的T-SQL 语句,参数n2说明一个存储过程可以包
5、含多条 T-SQL 语句。对于存储过程要注意下列几点:(1)用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是在 tempdb 中创建)。(2)成功执行 CREATE PROCEDURE 语句后,过程名称存储在 sysobjects 系统表中,而 CREATE PROCEDURE 语句的文本存储在 syscomments 中。(3)自动执行存储过程 QL Server 启动时可以自动执行一个或多个存储过程。这些存储过程必须由系统管理员在 master 数据库中创建,并在 sysadmin 固定服务器角色下作为后台过程执行。这些过程不能有任何输入参数。(4)sql_statem
6、ent的限制 除了 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL外,其它SET 语句均可在存储过程内使用。,用户存储过程的创建与执行,如下语句必须使用对象所有者名对数据库对象进行限定:CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE、CREATE INDEX、DROP INDEX、UPDATE STATISTICS 及DBCC语句。权限。CREATE PROCEDURE的权限默认授予sysadmin固定服务器角色成员、db_owner 和 db_ddladmin 固定数据库角色成员。sysadmin 固定服务器角色
7、成员和 db_owner 固定数据 库角色成员可以将 CREATE PROCEDURE 权限转让给其他用户。注意:存储过程的定义不能跨越批处理。2存储过程的执行 通过EXEC命令可以执行一个已定义的存储过程。语法格式:EXEC UTE return_status=procedure_name;number|procedure_name_var parameter=value|variable OUTPUT|DEFAULT,.n WITH RECOMPILE,用户存储过程的创建与执行,说明:参数return_status为可选的整型变量,保存存储过程的返回状态,EXECUTE语句使用该变量前,必
8、须对其定义。参数procedure_name 和number用于调用已定义的一组存储过程中的某一个,procedure_name代表了存储过程的组名,number用于指定组中的存储过程。定义存储过程组的目的是以便用一条DROP PROCEDURE 语句删除一组存储过程,对过程分组后,不能删除组中的单个过程。参数procedure_name_var代表存储过程名。parameter为CREATE PROCEDURE 语句中定义的参数名;value为存储过程的实参;variable为变量,用于保存OUTPUT参数返回的值。DEFAULT关键字表示不提供实参,而是使用对应的默认值。n:表示实参可有多
9、个。关键字WITH RECOMPILE指定强制编译。存储过程的执行要注意下列几点:(1)如果存储过程名的前三个字符为 sp_,SQL Server 会在 Master 数据库中寻找该过程。如果没能找到合法的过程名,SQL Server 会寻找所有者名称为 dbo 的过程。(2)参数可以通过 value 或 parameter_name=value 提供。(3)执行存储过程时,若语句是批处理中的第一个语句,则不一定要指定EXECUTE 关键字。,用户存储过程的创建与执行,3存储过程的几种情况(1)不使用任何参数的存储过程【例6.1】从XSCJ数据库的三个表中查询,返回学生学号、姓名、课程名、成绩
10、、学分。该存储过程不使用任何参数。/*创建存储过程*/CREATE PROCEDURE student_info AS SELECT a.学号,姓名,课程名,成绩,t.学分 FROM XS a INNER JOIN XS_KC b ON a.学号=b.学号 INNER JOIN KC t ON b.课程号=t.课程号 student_info 存储过程可以通过以下方法执行:EXECUTE student_info 或者 EXEC student_info 如果该过程是批处理中的第一条语句,则可使用:student_info,用户存储过程的创建与执行,(2)使用带参数的存储过程【例6.2】从XS
11、CJ数据库的三个表中查询某人指定课程的成绩和学分。该存储过程接受与传递参数精确匹配的值。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 student_info1 存储过程有多种执行方式,下面列出了一部分:EXECUTE student_info1 王林,计算机基础
12、 或者 EXECUTE student_info1 name=王林,cname=计算机基础 或者 EXECUTE student_info1 cname=计算机基础,name=王林 或者 EXEC student_info1 王林,计算机基础 或者 EXEC au_info cname=计算机基础,name=王林,用户存储过程的创建与执行,(3)使用带有通配符参数的存储过程【例6.3】从三个表的联接中返回指定学生的学号、姓名、所选课程名称及该课程的成绩。该存储过程在参数中使用了模式匹配,如果没有提供参数,则使用预设的默认值。CREATE PROCEDURE st_infoname varcha
13、r(30)=刘%AS SELECT a.学号,a.姓名,c.课程名,b.成绩FROM XS a INNER JOIN XS_KC b ON a.学号=b.学号 INNER JOIN KC c ON c.课程号=b.课程号 WHERE 姓名 LIKE name st_info 存储过程可以有多种执行形式,下面列出了一部分:EXECUTE st_info/*参数使用默认值*/或者 EXECUTE st_info 王%/*传递给name 的实参为王%*/或者 EXECUTE st_info 王张%(4)使用带OUTPUT参数的存储过程,用户存储过程的创建与执行,【例6.4】用于计算指定学生的总学分,
14、存储过程中使用了一个输入参数和一个输出参数。CREATE PROCEDURE totalcredit name varchar(40),total int OUTPUT AS SELECT total=SUM(KC.学分)FROM XS,XS_KC,KCWHERE 姓名=name AND XS.学号=XS_KC.学号 and XS_KC.课程号=KC.课程号 GROUP BY XS.学号 注意:OUTPUT 变量必须在创建表和使用该变量时都进行定义。定义时的参数名和调用时的变量名不一定要匹配,不过数据类型和参数位置必须匹。DECLARE t_credit char(20),total int
15、EXECUTE totalcredit 王林,total OUTPUT SELECT 王林,total(5)使用OUTPUT游标参数的存储过程 OUTPUT 游标参数用于返回存储过程的局部游标。【例6.5】在 XSCJ数据库的XS表上声明并打开一个游标。CREATE PROCEDURE st_cursor st_cursor CURSOR VARYING OUTPUT AS SET st_cursor=CURSOR FORWARD_ONLY STATIC FOR SELECT*FROM XS OPEN st_cursor,用户存储过程的创建与执行,在如下的批处理中,声明一局部游标变量,执行上述
16、存储过程过程并将游标赋值给局部游标变量,然后通过该游标变量读取记录。DECLARE MyCursor CURSOR EXEC st_cursor st_cursor=MyCursor OUTPUT WHILE(FETCH_STATUS=0)BEGIN FETCH NEXT FROM MyCursor END CLOSE MyCursor DEALLOCATE MyCursor(6)使用 WITH ENCRYPTION 选项 WITH ENCRYPTION 子句对用户隐藏存储过程的文本。【例6.6】创建加密过程,使用 sp_helptext 系统存储过程获取关于加密过程的信息,然后尝试直接从 s
17、yscomments 表中获取关于该过程的信息。CREATE PROCEDURE encrypt_this WITH ENCRYPTION AS SELECT*FROM XS,用户存储过程的创建与执行,通过系统存储过程sp_helptext可显示规则、默认值、未加密的存储过程、用户定义函数、触发器或视图的文本。执行如下语句:EXEC sp_helptext encrypt_this 结果集为提示信息:对象备注已加密。(7)创建用户定义的系统存储过程【例6.7】创建一个过程,显示表名以 xs 开头的所有表及其对应的索引。如果没有指定参数,该过程将返回表名以 kc 开头的所有表及对应的索引。USE
18、 master GO CREATE PROCEDURE sp_showtable TABLE varchar(30)=kc%AS SELECT tab.name AS TABLE_NAME,inx.name AS INDEX_NAME,indid AS INDEX_IDFROM sysindexes inx INNER JOIN sysobjects tab ON tab.id=inx.id WHERE tab.name LIKE TABLE GO USE XSCJ EXEC sp_showtable xs%GO,用户存储过程的创建与执行,4利用企业管理器编辑用户存储过程 如果要通过企业管理器
19、界面定义一个存储过程查询XSCJ数据库中每个同学各门功课的成绩,步骤如下:第1步 在SQL Server 企业管理器窗口中,选择相应的服务器、数据库和存储过程图标(本例选择XSCJ数据库),单击鼠标右键,出现如图6.1所示的快捷菜单。第2步 选择新建存储过程,则出现编辑存储过程的属性窗口,在窗口中输入定义的存储过程,如图6.2所示,然后选择“确定”按钮。,图6.1 存储过程的快捷菜单 图6.2 编辑存储过程的属性窗口,用户存储过程的修改,使用ALTER PROCEDURE命令可修改已存在的存储过程并保留以前赋予的许可。语法格式:ALTER PROC EDURE procedure_name;n
20、umber parameter data_type VARYING 0=default OUTPUT,.n1 WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION FOR REPLICATION AS sql_statement.n2 说明:各参数含义与CREATE PROCEDURE相同。如果原来的过程定义是用 WITH ENCRYPTION 或 WITH RECOMPILE 创建的,那么只有在 ALTER PROCEDURE 中也包含这些选项时,这些选项才有效。ALTER PROCEDURE 权限默认授予 sysadmin 固定服务器角色成员、db_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 过程 触发器
链接地址:https://www.31ppt.com/p-6458468.html