什么是存储过程呢?
存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句。
那为什么要用存储过程呢?
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
那存储过程怎么用呢?
以下通过表t_Admin 来了解存储过程,因为是要了解存储过程的简单用法,所以所有例子均很简单。
--无参数存储过程
--搜索t_Admin表中的所有信息
create proc SearchAdmin
as --不可以省略
begin -- begin 与 end 是一对,不可以只写其中一个,但可以都不写
select AdminID,AdminName,AdminPWD from t_Admin
end
go
--执行
exec SearchAdmin
go
--有参数存储过程
--根据AdminID搜索t_Admin对应的信息
create proc SearchAdminByID
@AdminID int
as
select AdminID,AdminName,AdminPWD from t_Admin where AdminID = @AdminID
go
exec SearchAdminByID 1
go
--上面是在外部给变量赋值,也可以在内部给变量赋值
create proc SearchAdminByID2
@AdminID int=2
as
Select AdminID,AdminName,AdminPWD from t_Admin where AdminID = @AdminID
go
--执行 不给值时 会搜索2的数据
exec SearchAdminByID2
--执行 给值则搜索给定值的数据
exec SearchAdminByID2 1
--把变量的内容输出,使用output
create proc SearchOutPut
@AdminName varchar(20),
@IsRight int output
as
if exists (select AdminID,AdminName,AdminPWD from t_Admin where AdminName = @AdminName)
set @IsRight = 1
else
set @IsRight = 0
go
--执行
declare @IsRight int
exec SearchOutPut 'Gyg01', @IsRight output
select @IsRight as 数值
----以上都是全局变量,接下来了解局部变量
------------------------------------------------------------
--局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。
--局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名 数据类型}
--局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}
--局部变量的显示:select @变量名
create proc SearchAdmin1
as
declare @AdminName varchar(100)
set @AdminName='gyg01'
select AdminID,AdminName,AdminPWD from t_Admin where AdminName = @AdminName
go
exec SearchAdmin1
--那如果是要把局部变量的数据显示出来怎么办呢?
create proc SearchAdmin2
as
declare @AdminName varchar(100)
set @AdminName=(select AdminName from t_Admin where AdminID = 1)
select @AdminName
go
exec SearchAdmin2