存储过程

什么是存储过程

存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句。

为什么要用存储过程

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权

例子表Student

Student

无参数存储过程

create proc Proc1
as //此处 as 不可以省略不写
begin //beginend 是一对,相当于花括号,形成一个语句块,结构清晰,不可以只写其中一个,但可以都不写
select * from Student
end
go //go在存储过程或语句中起结束,终止上面语句的作用。标识一批sql到这里就要提交执行,相当于一个批处理

修改存储过程

alter proc Proc1
as
select No from Student
go

执行存储过程

exec Proc1

有返回值的存储过程

@@rowcount表示返回受影响的行数

alter proc Proc1
as
update Student set Grade=Grade+1 where No < 3
return @@rowcount
go

有输入参数的存储过程

alter proc Proc1
@no int
as
select * from Student where No=@no
go
--执行该存储过程
exec Proc1 2 或者 exec Proc1 @no=2

使用out

Out相当于C#中的ref参数(传进、传出缺一不可),而且传进传出的时候都要标识为ref

alter proc Proc1
@no int,
@count int out
as
set @count = @count+@no
go
--执行该存储过程
declare @Receive int --声明变量
set @Receive =100 --给变量赋值
exec Proc1 2,@Receive out --传入两个变量
select @Receive --值为102

使用output

相当于存储过程的返回值,不能传入,它是在存储过程中定义,并且输出的

--传入no,返回No比no大的有多少个
alter proc Proc1
@no int,
@count int output
as
select @count=COUNT(*) from Student where No>@no
go
--执行该存储过程
declare @Receive int --声明一个变量用来接收存储过程的@count
exec Proc1 2,@Receive output 
select @Receive

使用NOCOUNT

SET NOCOUNT { ON | OFF }
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上 SET NOCOUNT OFF这样的话,以达到优化存储过程的目的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值