欢迎来到天天文库
浏览记录
ID:58404007
大小:400.50 KB
页数:30页
时间:2020-09-07
《存储过程、触发器.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章存储过程、触发器6.1存储过程6.2触发器6.1.1存储过程的类型(1)系统存储过程系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。系统存储过程定义在系统数据库master中,其前缀是sp_,例如常用的显示系统对象信息的sp_help存储过程,它们为检索系统表的信息提供了方便快捷的方法。系统存储过程允许系统管理员执行修改系统表的数据库管理任务,可以在任何一个数据库中执行。常用的系统存储过程,请见附录。(2)本地存储过程本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特
2、定数据库操作任务,其名称不能以sp_为前缀。(3)临时存储过程临时存储过程属于本地存储过程。如果本地存储过程的名称前面有一个“#”,该存储过程就称为局部临时存储过程,这种存储过程只能在一个用户会话中使用。如果本地存储过程的名称前有两个“##”,该过程就是全局临时存储过程,这种存储过程可以在所有用户会话中使用。(4)远程存储过程远程存储过程指从远程服务器上调用的存储过程。(5)扩展存储过程在SQLServer2000环境之外执行的动态链接库称为扩展存储过程,其前缀是sp_。使用时需要先加载到SQLSer
3、ver2000系统中,并且按照使用存储过程的方法执行。6.1.2用户存储过程的创建与执行用户存储过程只能定义在当前数据库中,可以使用SQL命令语句或SQLServer的企业管理器创建存储过程。缺省情况下,用户创建的存储过程归数据库所有者拥有,数据库的所有者可以把许可授权给其他用户。1.创建存储过程语法格式:CREATEPROC[EDURE]procedure_name[;number]/*定义过程名*/[{@parameterdata_type}/*定义参数的类型*/[VARYING][=defaul
4、t][OUTPUT] ]/*定义参数的属性*/[,...n1][WITH {RECOMPILE
5、ENCRYPTION
6、RECOMPILE,ENCRYPTION}]/*定义存储过程的处理方式*/[FORREPLICATION]ASsql_statement[...n2]/*执行的操作*/说明:参数procedure_name用于指定存储过程名,必须符合标识符规则,且对于数据库及其所有者必须唯一;创建局部临时过程,可以在procedure_name前面加一个“#”;创建全局临时过程,可以在procedu
7、re_name前加“##”。参数number为可选的整数,用于区分同名的存储过程,以便用一条DROPPROCEDURE语句删除一组存储过程;6.1.2用户存储过程的创建与执行FORREPLICATION用于说明不能在订阅服务器上执行为复制创建的存储过程,该选项不能和WITHRECOMPILE一起使用。参数sql_statement代表过程体包含的T-SQL语句,参数n2说明一个存储过程可以包含多条T-SQL语句。对于存储过程要注意下列几点:(1)用户定义的存储过程只能在当前数据库中创建(临时过程除外,
8、临时过程总是在tempdb中创建)。(2)成功执行CREATEPROCEDURE语句后,过程名称存储在sysobjects系统表中,而CREATEPROCEDURE语句的文本存储在syscomments中。(3)自动执行存储过程QLServer启动时可以自动执行一个或多个存储过程。这些存储过程必须由系统管理员在master数据库中创建,并在sysadmin固定服务器角色下作为后台过程执行。这些过程不能有任何输入参数。(4)sql_statement的限制除了SETSHOWPLAN_TEXT和SETSH
9、OWPLAN_ALL外,其它SET语句均可在存储过程内使用。6.1.2用户存储过程的创建与执行如下语句必须使用对象所有者名对数据库对象进行限定:CREATETABLE、ALTERTABLE、DROPTABLE、TRUNCATETABLE、CREATEINDEX、DROPINDEX、UPDATESTATISTICS及DBCC语句。权限。CREATEPROCEDURE的权限默认授予sysadmin固定服务器角色成员、db_owner和db_ddladmin固定数据库角色成员。sysadmin固定服务器角色
10、成员和db_owner固定数据库角色成员可以将CREATEPROCEDURE权限转让给其他用户。注意:存储过程的定义不能跨越批处理。2.存储过程的执行通过EXEC命令可以执行一个已定义的存储过程。语法格式:[EXEC[UTE]]{ [@return_status=]{procedure_name[;number]
11、@procedure_name_var}[[@parameter=]{value
12、@variable[OUTPUT]
13、[DEFAULT]}[
此文档下载收益归作者所有