(1)实现分页功能前,先看下row_number()函数:针对select 语句返回的每一行,从1开始编号,赋予其连续的编号。
比如:select row_number() over (order by ProductID ) as row ,Description.
(2) 使用表变量。
declare @Product Table
(RowNumber int,
ProductID int,
Description varchar(max),
Price money)
insert into @Product
select Row_Number() over (order by ProductID) as RowNumber,
ProductID,Description,Price
from Product
(3)现在来实现分页(存储过程)。假如我们想把属于蓝色笔,并且价格都小于5的所有笔检索出来,显示描述(Description)和ProductID,和类名.每页显示2条数据,当前页为第二页。
declare @NewsDetail table
(RowNumber int,
ProductID int ,
ClassName varchar(50),
Description varchar(max))
insert into @NewsDetail
select Row_Number over (order by ProductID) ,ProductID,ClassName,Description
from
-- ---- 一个联合查询,前面提过
(
select p.ProductID ,c.ClassName,p.Description from
ClassProduct cp inner join Class c on cp.ClassID=c.ClassID
inner join Product p on p.ProductID=cp.ProductID
where c.ClassName='blue' and p.Price<5)
as NewTable
---全部查出来看下效果
select * from @NewsDetail
(4)现在开始写存储过程,需要三个输入参数 @CurrentPage当前是第几页,@PerPage每页显示几条数据,输出参数HowManyCount总共多少条数据。
create procedure GetProductsInCurrentPage
(@CurrentPage int ,
@Perpage int ,
@HowManyCount int output)
as
declare @NewsDetail table
(RowNumber int,
ProductID int ,
ClassName varchar(50),
Description varchar(max))
insert into @NewsDetail
select Row_Number() over (order by ProductID) ,ProductID,ClassName,Description
from
-- 联合查询,前面提过
(
select p.ProductID ,c.ClassName,p.Description from
ClassProduct cp inner join Class c on cp.ClassID=c.ClassID
inner join Product p on p.ProductID=cp.ProductID
where c.ClassName='blue' and p.Price<5)
as NewTable
--查询出来
select * from @NewsDetail where
rownumber>(@CurrentPage-1)*@PerPage and rownumber<=@CurrentPage*@PerPage
select @HowManyCount=count(ProductID) from @NewDetails
比如:select row_number() over (order by ProductID ) as row ,Description.
(2) 使用表变量。
declare @Product Table
(RowNumber int,
ProductID int,
Description varchar(max),
Price money)
insert into @Product
select Row_Number() over (order by ProductID) as RowNumber,
ProductID,Description,Price
from Product
(3)现在来实现分页(存储过程)。假如我们想把属于蓝色笔,并且价格都小于5的所有笔检索出来,显示描述(Description)和ProductID,和类名.每页显示2条数据,当前页为第二页。
declare @NewsDetail table
(RowNumber int,
ProductID int ,
ClassName varchar(50),
Description varchar(max))
insert into @NewsDetail
select Row_Number over (order by ProductID) ,ProductID,ClassName,Description
from
-- ---- 一个联合查询,前面提过
(
select p.ProductID ,c.ClassName,p.Description from
ClassProduct cp inner join Class c on cp.ClassID=c.ClassID
inner join Product p on p.ProductID=cp.ProductID
where c.ClassName='blue' and p.Price<5)
as NewTable
---全部查出来看下效果
select * from @NewsDetail
(4)现在开始写存储过程,需要三个输入参数 @CurrentPage当前是第几页,@PerPage每页显示几条数据,输出参数HowManyCount总共多少条数据。
create procedure GetProductsInCurrentPage
(@CurrentPage int ,
@Perpage int ,
@HowManyCount int output)
as
declare @NewsDetail table
(RowNumber int,
ProductID int ,
ClassName varchar(50),
Description varchar(max))
insert into @NewsDetail
select Row_Number() over (order by ProductID) ,ProductID,ClassName,Description
from
-- 联合查询,前面提过
(
select p.ProductID ,c.ClassName,p.Description from
ClassProduct cp inner join Class c on cp.ClassID=c.ClassID
inner join Product p on p.ProductID=cp.ProductID
where c.ClassName='blue' and p.Price<5)
as NewTable
--查询出来
select * from @NewsDetail where
rownumber>(@CurrentPage-1)*@PerPage and rownumber<=@CurrentPage*@PerPage
select @HowManyCount=count(ProductID) from @NewDetails
浙公网安备 33010602011771号