SQL Server存储过程的创建
概念
存储过程(Stored Procedure)是在数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户调用存储过程并传递参数来执行它。
作用
优势:响应时间上来说有优势,可以给我们带来运行效率提高的好处,且使用存储过程的系统更加稳定
缺点:维护性较差,相对于简单sql,存储过程并没有什么优势,并且在进行调试时比较困难
存储过程和触发器的区别
触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关
案例
先在数据库创建了两张表
1.不带参数的存储过程
语句
--1.不带参数的存储过程
--创建存储根据名称查询数据(create创建,alter修改,drop删除)
create proc cp_select_book_bybook --创建存储过程
as
select * from Books --查询book表
再进行调用
--调用
exec cp_select_book_bybook
调用后执行结果
2.带输入参数的存储过程
语句
--2.带输入参数的存储过程
--根据名称查询
go
create proc cp_select_book_ByName
(
@name varchar(50)
)
as
select * from Books where name like '%'+@name+'%'
再进行调用
--调用
exec cp_select_book_ByName '红楼'
调用后执行结果
3.带输出参数的存储过程
语句
--3.带输出参数的存储过程
--根据名称查询,返回记录,同时返回记录数
go
create proc cp_select_books_ByNameExt
(
@name varchar(50), --多个参数用分号隔开
@recordRows int output --输出类型
)
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)
调用后执行结果
4.分页的存储过程
语句
--4.分页的存储过程
--根据名称,页码,每页显示条数 --输入参数
--返回查询条件的总记录数 --输出参数
--显示查询结果
go
create proc cp_select_books_ByPage
(
@name varchar(50), --多个参数用分号隔开
@pageIndex int out, --页码
@pageSize int out, --每页显示条数
@recordRows int out --总记录数
)
as
select top (@pageSize) * from Books
where id not in(
select top (@pageSize*(@pageIndex-1)) id
from Books
where name like '%西游%'
order by id
)
and name like '%西游%' order by id
select @recordRows=count(*) from Books
再进行调用
--调用
--定义一个变量,接收返回参数@recordRows的值
declare @rs int
exec cp_select_books_ByPage '西游','1','5',@rs out
print @rs
调用后执行结果