概述:
首先,需要了解存储过程的的常见类型 —— 从参数的角度分为有参数的存储过程和无参数的存储类型,从返回结果的角度分为“返回结果集”、“使用 output 参数”、“通过 return 参数”。
语法:
Create proc procedure_name
[ { @parameter data_type } [ varying ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS
sql_statement [ ...n ]
创建无参数的存储过程
create proc StuProc as //此处 as 不可以省略 begin //begin 和 end 是一对,不可以只写其中一个,但可以都不写 select S#,Sname,Sage,Ssex from student end go
创建有参数的存储过程
全局变量
全局变量也称为外部变量,它的作用域为从变量定义处开始,到本程序文件的末尾。
选出指定姓名的学生信息:
create proc StuProc @sname varchar(100) as begin select S#,Sname,Sage,Ssex from student where sname=@sname end go exec StuProc '赵雷' //执行语句
上面是在外部给变量赋值,也可以在内部直接给变量设置默认值
create proc StuProc @sname varchar(100)='赵雷' as begin select S#,Sname,Sage,Ssex from student where sname=@sname end go exec StuProc
也可以把变量的内容输出,使用 output
create proc StuProc @sname varchar(100), @IsRight int output //传出参数 as if exists (select S#,Sname,Sage,Ssex from student where sname=@sname) set @IsRight =1 else set @IsRight=0 go declare @IsRight int exec StuProc '赵雷' , @IsRight output select @IsRight
以上是全局变量,下面来了解局部变量
局部变量也称为内部变量,局部变量必须先用 declare 命令定义后才可以使用。 其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。
局部变量的定义: declare {@变量名 数据类型}
局部变量的赋值方法: set {@变量名=表达式} 或者 select {@变量名=表达式}
局部变量的显示: select @变量名
(使用局部变量查询指定姓名的学生信息)
create proc StuProc as declare @sname varchar(100) set @sname='赵雷' select S#,Sname,Sage,Ssex from student where sname=@sname go exec StuProc
返回局部变量的数据(将局部变量的数据显示出来)
create proc StuProc as declare @sname varchar(100) set @sname=(select Sname from student where S#=01) select @sname go exec StuProc
从存储过程返回结果有三种形式:
返回结果集(一列或多列,单行或多行,通过 select 子句)
使用 output 参数
通过 return 参数
参数的传递
① 输入参数: 允许调用方将数据值传递到存储过程
② 输出参数: 允许存储过程或游标变量传递回调用方
每个存储过程都会向调用方返回一个整数返回代码,如果存储过程没有显式设置返回代码的值,则返回代码为0
调用存储过程——输出参数
返回结果集:
AS
select au_lname from authors
GO
或:
AS
declare @au_lname(20)
select @au_lname = au_lname from authors where AU_ID = '172-32-1176'
GO //结果集多个的,变量值为最后一个
使用 output 参数:
必须在 create proc 语句最后指定关键字 output ,否则回产生一个错误(text 类型数据不能作为 output 参数输出)
用 return 语句返回值: (返回值为整数)
或: