Sql sever 存储过程

存储过程定义

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个“execute 存储过程名 参数”命令来调用存储过程。

存储过程优缺点

优势:响应时间上来说有优势,可以给我们带来运行效率提高的好处,且使用存储过程的系统更加稳定
缺点:维护性较差,相对于简单sql,存储过程并没有什么优势,并且在进行调试时比较困难

存储过程的实现

表名为:Books

列名 数据类型
ID int
Name Remark

存储过程的创建和调用

  1. 不带参数的存储的创建和调用

create proc cp_select_book_byName
as
select * from books
--调用
exec cp_select_book_byName
--删除
drop proc cp_select_book_byName
--修改
alter proc [名字]
as
  select * from books


  1. 带输入参数的存储过程的创建和调用

go
create proc cp_select_books_ByNameExt
(
  @name varchar(50),
  @recordRows int out
)
as 
select * from books where Name like '%'+@name+'%'
select @recordRows = count(*) from books
--调用
  --定义一个变量,接受返回参数 @recordRows的值
  declare @rs int
exec cp_select_books_ByNameExt'西游',@rs out
print '查询的记录数是:'+ convert(varchar(5),@rs)
  1. 简单的分页的存储过程的创建和调用



--根据名称,页码,每页显示的条数 --输入参数
--返回符合查询条件的总记录数 --输出参数
--显示查询结果
go
create proc cp_select_books_ByNameExt1
(
  @name varchar(50),
  @pageindex  int,--页码
  @pagesize int,--每页显示条数
  @rs int out --总记录数
)
as 
select top(@pagesize)* from books  where id not in
( 
select top (@pagesize * (@pageindex-1)) id from books where name like '%'+Name+'%'
)
and name like '%'+Name+'%' order by ID
select @rs=count (*) from books where name like '%'+Name+'%'

declare @rows int
exec cp_select_books_ByNameExt1 'js',1,5,@rows out
print @rows

总结

  1. 当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;
  2. 当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;
  3. 当对比较复杂的统计和汇总也要考虑存储过程,但是过多的使用存储过程会降低系统的移植性。

猜你喜欢

转载自blog.csdn.net/weixin_44615591/article/details/106254556