-------------------------------------------------------------存储过程---------------------------------------------------
存储过程创建时就在服务器上编译了,所以比执行单个sql语句快
用exec 系统存储过程名称就可以调用,常用的有:
sp_renamedb '原数据库名','修改后的名' 作用 修改数据库名称 在master下用(这个功能比较实用)
sp_tables --当前数据库中而已查询的对象的列表
sp_helpindex stuMarks 查看stuMarks表的索引
Exec xp_cmdshell 'mkdir d:\bank',no_output 创建文件夹
存储过程里也可以 调用视图
用户自定义存储过程,
1:不带参数的存储过程:
create exec proc 或者procedure 存储过程名 (过程名最好是proc_名称为好)
as
(可以在里面定义一些局部变量)
sql语句,任何都行
go
调用
Exce 存储过程名
2:带输入参数的存储过程:(每个参数 后面要有逗号)
create proc proc_name
(参数) @ mark1 int =60 (=60表示给了一个默认值,没传参数进来的时候,就用这个值),
@ mark2 int =60 (=60表示给了一个默认值,没传参数进来的时候,就用这个值),
@address varchar(20)
as
语句
go
调用
1:Exce proc_name 不传任何值 表示使用默认的值 (但是@address没有给默认值所以 编译后会抱错)
没有给默认值的输入参数,我们在调用存储过程的时候要给 值
改:Exce proc_name @address='武汉'
2:Exce proc_name 80,@address='武汉' (只给了一个数字的参数,会默认把参数给第一个上面)
3:Exce proc_name @mark2=80 @address='武汉' 这样才会把参数给到第2个上面
(要想不传参数必须所有的参数 在定义的时候都给上默认的值)
3,带输出参数的存储过程
创建:
create proc proc_name
--(定义参数)
@ id int output , --关键字,声明为输出参数,没有的话就是输入参数。
@ hehe int =10 --输入参数
as
sql 语句 给输出参数赋值/
go
调用
1:定义变量:用于接受存储过程返回的结果
declare @id int
2: exec proc_name @id output,60 --调用的时候也得声明
--------------------------------------------------------------------错误处理--------------------------------------------
raiserror 抛出错误
例子
当我们不愿意的变量分数>100时候
if(@mark>100)
begin
//开始抛出异常
Raiserror('几个分数不能是大于100的数字',16,1) 16代表错误等几 我门最好都写16,17,18,1表示错误状态,一般存储过程里都写1
return --立即返回,退出存储过程
end