sqlserver 进阶(二)存储过程的使用
存储过程相当于 Java 中的无返回值函数,可以被其它模块反复调用,但是存储过程可以通过输出参数返回多个处理结果,存储过程会在数据库中一直保留,直到被删除。
1、语法结构
CREATE PROCEDURE
[schema.]procedure_name
[arg1 ] arg_type1,
[arg2 ] arg_type2 [OUTPUT],
……
AS
--声明部分
BEGIN
--执行部分
EXCEPTION
--异常处理部分
END;
说明:
其中:
存在同名存储过程不会覆盖,只能够删除已存在的存储过程才能创建新的存储过程
arg1,arg2,…,argn 是过程的形参的名称,是可选的。
arg_type1, arg_type2,…,arg_typen 是对应的型参的数据类型,参数类型可以是基本的数据类型,不能使用空值 null,但是存储过程可以返回空值。
OUTPUT
用于接受调用程序的值,并向调用程序返回更新的值
没有 OUTPUT 修饰默认为传入值
2、示例
例 1:
--创建带output参数的存储过程
CREATE PROCEDURE PR_Sum
@a int,
@b int,
@sum int OUTPUT
AS
BEGIN
set @sum=@a+@b
END
例 2:
--创建Return返回值存储过程
CREATE PROCEDURE PR_Sum2
@a int,
@b int
AS
BEGIN
Return @a+@b
END
例 3:
--无参存储过程
--创建过程,无参过程名后不要加括号
create procedure proc_first
as
declare @v_ename varchar(10)='北京'
begin
print @v_ename;
end;
例 4:
--有参数存储过程
--创建有参数的过程
create procedure proc_find(
@v_eno int,
@v_esal int output
)
as
declare @v_ename varchar;
begin
select @v_ename=ename,@v_esal= sal from emp where empno=@v_eno;
set @v_esal=@v_eno+@v_esal
end;
3、执行
使用 EXECUTE 语句
语法
EXECUTE procedure_name (list of parameters) ;
其中,
Procedure_name 是过程的名称,
list of parameters 是参数列表。
--执行无参存储过程
begin
execute proc_first
end;
--执行有参存储过程
--执行有参数过程
--执行存储过程获取output型返回值
declare @v_esal int
execute proc_find 1,@v_esal output
print @v_esal
--执行存储过程获取output型返回值
declare @mysum int
execute PR_Sum 1,2,@mysum output
print @mysum
--执行存储过程获取Return型返回值
declare @mysum2 int
execute @mysum2= PR_Sum2 1,2
print @mysum2
4、删除
语法
DROP PROCEDURE procedure_name;
其中,procedure_name 是过程的名称。
--删除存储过程
drop procedure proc_first;