SQL存储过程
以Student表为例
Sid Sname
1 张三
2 李四
1、无参数无返回值的存储过程
创建: create proc stuproc // stuproc 是存储过程的名称
as // as 不可以省略
begin // begin 和 end 是一对 不可以只写其中的一个,可以都不写
select Sid,Sname from Student
end
go // 以go结尾
调用:exec stuproc
2、有参数无返回值的存储过程
定义一个全局变量 也称外部变量,在函数的外部定义的,他的作用域从变量定义处开始,到本程序文件的末尾
创建: create proc stuproc // stuproc 是存储过程的名称
@Sname varchar(20) // 定义一个全局变量
as // as 不可以省略
begin // begin 和 end 是一对 不可以只写其中的一个,可以都不写
select Sid,Sname from Student where Sname=@Sname
end
go // 以go结尾
调用:exec stuproc ‘ 李四 ’
以上是在外部给变量赋值,也可以在内部给变量赋值
创建: create proc stuproc
@Sname varchar(20)= ‘ 李四 ’
as
begin
select Sid,Sname from Student where Sname=@Sname
end
go
调用:exec stuproc
3、有参数有返回值(多个参数的时候用 , 隔开)
创建: create proc stuproc
@Sname varchar(20) ,
@a varchar(20) output
as
if exists (select Sid,Sname from student where Sname=@Sname)
set @a = ' 1 '
else set @a = ' 0 '
调用: declare @a varchar(20)
exec stuproc '李四' ,@a output
select @a
以上是全局变量,下面是局部变量
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后在使用这种变量是非法的。
局部变量的定义:必须先用declare命令以后以后才可以使用 declare{ @变量名 数据类型 }
局部变量的赋值方法:set { @变量名= 表达式} 或者 select { @变量名 = 表达式 }
局部变量的显示 select @变量名
以表 bbb 为例
id name pwd
1 Lily 111
2 Tim 222
使用存储过程做登陆
create proc Login
@name varchar(20), //定义参数变量
@a varchar(max) output //定义输出变量
as
begin
if exists (select pwd from bbb where name=@name) //判断是否存在
set @a=(select pwd from bbb where name=@name) //如果存在输出密码
else set @a = ' 0 ' //如果不存在返回 ‘ 0 ’
end
go
//调用存储过程
declare @a varchar(max) //声明@a变量
exec Login ' Lily ' , @a output
select @a