加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

存储过程

发布时间:2020-12-12 13:49:29 所属栏目:MsSql教程 来源:网络整理
导读:什么是存储过程 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。 通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句。 为什么要用存储过程 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行

什么是存储过程

存储过程就是作为可执行对象存放在数据库中的一个或多个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这样的话,以达到优化存储过程的目的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读