很多程序员朋友都视sql为洪湖水猛兽,其实深入分析一下,多用些时间与耐心,sql还是可以理解的。
本文主要是针对刚刚接触sql的新手朋友,进行一个sql存储过程的简单分享。
小子第一次发布文章,也是借鉴各位前辈的结晶所得,发布本文的目的也是希望帮助更多想要学习数据库的人。
文章开始
首先要了解什么是存储过程?
存储过程就是作为可执行对象存放在数据库中的一个或多个sql命令。
通俗来讲:存储过程其实就是能完成一定操作的一组sql语句。
存储过程的优势:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般sql语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
存储过程的具体使用方法如下:
首先,在本地数据库中新建一张表product,并添加了一些数据进行测试,方便读者理解。
以下通过表product来了解存储过程,因为目的是了解存储过程的简单用法,所以所有例子均很简单。
表product共有字段4个,分别为proId,proName,proPrice,createTime
如图:
首先介绍无参数的存储过程:
选出product表中的所有信息,
create proc proproc --proc是关键字(proc等同于procedure) proproc为自定义存储过程名
as --此处 as 不可以省略不写
begin --begin 和 end 成对出现,可以都不写,但不能只出现一个
select proId,proName,proPrice,createTime from product
end
go
--现在执行此语句创建的存储过程proproc
exec proproc --exec 执行已有存储过程的关键字 proproc是要执行的存储过程名
执行结果如下
进行到这里,存储过程proproc已经保存在数据库中,以下将对存储过程proproc进行修改。
有参数存储过程:
全局变量
全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。
选出指定商品名的商品信息:
alter proc proproc --alter修改存储过程的关键字
@proName varchar(50)
as
begin
select proId,proName,proPrice,createTime from product where proName=@proNameend
go
exec proproc '面包' --’面包’是作为参数传给存储过程进行使用的,存储过程会根据用户传入的参数,返回结果
如图
以上是在外部给变量赋值,也可以在内部直接给变量设置默认值
alter proc proproc
@proName varchar(50)='面包'
as
begin
select proId,proName,proPrice,createTime from product where proName=@proName
end
go
exec proproc --因为参数在内部已经确定,所以执行存储过程不再需要传入参数
结果如下:
也可以把变量的值输出,使用output --与C#中的out相似
alter proc proproc
@proName varchar(50),
@bool int output //传出参数
as
if exists (select proId,proName,proPrice,createTime from product where proName=@proName )
set @bool=1
else
set @bool=0
go
目的:如果表中有商品’可乐‘ 则显示1 否则显示0
declare @bool int --先声明
exec proproc '可乐' , @bool output
select @bool
结果如下
以上是全局变量,下面了解局部变量。
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。
局部变量的定义:必须先用declare声明以后才可以使用,declare{@变量名 数据类型}
局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}
局部变量的显示:select @变量名
alter proc proproc
as
declare @proName varchar(50)
set @proName ='毛巾'
select proId,proName,proPrice,createTime from product where proName=@proName
go
exec proproc
结果如下
显示局部变量的方法:
alter proc proproc
as
declare @proName varchar(50)
set @proName=(select product.proName from product where proid=01 )
select @proname
go
exec stuproc
结果如下
本文只是简单的介绍了sql存储过程,本人也会继续学习,如果有所得,也会继续分享。
如果本文对你有所帮助,希望你能把已有的知识分享给更多的人,终。