目录
- 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)
如下图:
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