目录

  • 1)存储过程的定义
  • 2)存储过程的优缺点
  • 3)存储过程的创建与调用
  • 4)存储过程举例说明
  • 5)例题:创建一个存储过程,根据名称,第几页,每页显示多少条,查询满足条件的记录和记录数(分页查询)


1)存储过程的定义

简单来说,存储过程是一个预编译的SQL语句,保存在数据库中,可由应用程序调用执行。

2)存储过程的优缺点

优点:允许模块化的设计,就是说只需要创建一次,以后在程序中便可调用多次。如果某次操作需要执行多次SQL语句,使用存储过程比单纯SQL语句执行要快。响应时间上来说有优势,可以给我们带来运行效率提高的好处,且使用存储过程的系统更加稳定。

缺点:维护性较差,相对于简单SQL,存储过程并没有什么优势,并且在进行调试时会比较困难。

3)存储过程的创建与调用

1)创建
create proc 存储过程名 参数
2)调用
exec 存储过程名 参数
3)修改
alter proc 存储过程名 参数
4)删除
drop proc 存储过程名

4)存储过程举例说明

首先创建两张表:1)书籍表(Books) 2)书籍分类表(bookType

如下图:

sql server 存储过程 长度 sql server存储过程在哪_存储过程


sql server 存储过程 长度 sql server存储过程在哪_存储过程_02


1>创建不带参数的存储过程

--不带参数的存储过程
create proc cp_select_books
as
select * from Books

--调用存储过程
exec cp_select_books

2>创建带输入参数的存储过程

--带输入参数的存储过程
create proc cp_select_books_ByName
(
	@name nvarchar(50)
)
as
select * from Books where Name like '%'+@name+'%'

--调用存储过程
exec cp_select_books_ByName '建筑'

3>创建带输入和输出参数的存储过程

--带输入和输出参数的存储过程
--进行模糊查询,返回记录数
create proc cp_select_books_ByNameEx
(
	@name nvarchar(50),
	@rowCount int out
)
as
select * from Books where Name like '%'+@name+'%'
select @rowCount=COUNT(*) from Books where Name like '%'+@name+'%'

go
--调用存储过程
--定义一个变量,接受返回值@rowCount
declare @count int
exec cp_select_books_ByNameEx '建筑',@count out
--打印记录数
print @count

5)例题:创建一个存储过程,根据名称,第几页,每页显示多少条,查询满足条件的记录和记录数(分页查询)

--创建一个存储过程,根据名称,第几页,每页显示多少条,查询满足条件的记录和记录数
create proc cp_select_books_ByNameFy
(
	@name nvarchar(50),    --名称
	@pageIndex int,		   --页码
	@pageSize int,		   --每页显示多少条
	@rowCount int out	   --输出参数满足条件的行数
)
as 
select top (@pageSize) * from Books where ID not in(select top (@pageSize*(@pageIndex-1)) 
ID from Books where Name like '%'+@name+'%' order by ID) and Name like '%'+@name+'%' 
order by ID
select @rowCount=COUNT(*) from Books where Name like  '%'+@name+'%'


go
--调用存储过程
--定义一个变量,接受返回值@rowCount
declare @count int 
exec cp_select_books_ByNameFy '建筑',2,5,@count out
--打印记录数
print @count