这与普通的SQL和批处理不同。可以将常用的功能,写成存储过程,以提高执行效率。
插入、更新、删除和查看系统表。
as
sql statement
2、执行存储过程
存储过程不是批处理的第一条语句时,exec 或 execute 后接过程名
可以使用sp_helptext proce_name 查看过程定义,也使用此方法查看DEFAULT、RULE的定义
4、重编译存储过程
@fname varchar(15), // 声明参数 @arg_name arg_type
@lname varchar(15)
as
select * from user
where fname = @fname and lname = @lname
提供的参数值,如果有标点符号或空白字符,则需要用引号(双引号或单引号)将参数值括起来.
缺省参数值:没有指定参数值时,程序会使用缺省参数值,调用存储过程
定义缺省参数值:@default_arg_value = 'default values' //即在定义参数时,给其赋值
6、存储过程组
如a;1,a;2等程序,组成了程序组a。程序组使用同一个过程名加分号再加子程序的序号。
不能单独删除一个子程序组,要整个删除程序组。
由配置参数'allow procedure grouping'控制是否可使用程序组,默认值为1,即可以使用程序组。
7、延时执行存储程序
waitfor delay '0:10' --延时10分钟才执行下面语句
exec proc_name
end
8、存储过程的返回状态
status_value = 0 表示执行成功
status_value = -1到-99表示执行失败
这些都是系统定义的返回值,可以在这些值之外,自定义返回状态值。
用局部变量捕获返回状态值
exec @status = sp_help
select @status
如果执行时有多个错误,则返回绝对值最大的返回状态值。如出现-1,-4错误,则只返回-4状态值
自定义返回状态值
@input int
as
if @input = 1
return 1
else
return 2
9、检查当前用户是否属于某角色
可从sysusers查询到可用的角色名,sysusers存储用户名、组、角色信息
10、使用存储过程返回参数
@input1 varchar(10),
@input2 varchar(10),
@result varchar(20) output //定义参数,并加output参数,表明为返回参数
as
select @result = @input1 + ' ' +@input2
declare @result varchar(20)
exec test_return_arg 'this is','a test',@result output
执行时,先定义返回值变量,在exec中返回参数写在最后,并加上output选项
不管返回参数的值是否改变,返回参数的值还是输出。
output选项可写成out
11、存储过程的重命名
sp_rename test_return_arg,return_arg
sp_renamedb old_name,new_name //重命名数据库
sp_renamedb 需将'single user'设为true,再从master数据库中执行sp_renamedb
renamedb, rename 与 sp_helpdb ,sp_help 有着类似的层级关系。
12、删除存储过程
13、系统存储过程
管理员可以直接修改系统表。
实验:将配置选项'allow updates to system tables'设为1,即可更新系统表。
试过update用户数据库的sysusers表的Name字段,成功。sp_configure可列出所有配置选项
如果在sybsystemprocs外,使用的存储过程引用系统表,会映射到当前数据库的系统表。
14、系统存诸过程的权限
是否可以推广到存储过程在哪个数据库,其权限的管理就在哪个数据库做呢?(我想是的)
一旦在sybsystemprocs中授予系统存储过程的执行权限,就可以在全部数据库中执行系统存储过程(有点危险),
即使是数据库所有者,也不能从内部直接控制存储过程的权限。
转载于:https://blog.51cto.com/ajdan4q/329072
421




被折叠的 条评论
为什么被折叠?



