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;