sql server 实现分页

在MYSQL中

SELECT * FROM tablename LIMIT m,n

第一种方法:

SELECT TOP(n-m+1) id FROM tablename

where id not in(select top m-1 id from tablename)

 

select top @pageSize id from tablename

where id not in(select top @offset id from tablename)

第二种方法:

select id,name,....

from(

  select ROW_NUMBER() over (order by id) as row,* from tablename

  where  @id= '' or id = @id

) as S

where row between @beginNum and @beginNum + @pageSize -1;

在子查询中使用开窗函数生成新的一列row,然后根据row进行分页操作

 

下面贴一个例子

ALTER PROCEDURE [游戏中心].[管理_服务器查询]
@beginNum int,
@pageSize int,
@服务器编号 varchar(50),
@服务器名称 nvarchar(200),
@服务器ID varchar(20),
@服务器值 varchar(100),
@count as int output
AS
BEGIN
SET NOCOUNT ON;
select 服务器GID as serverGid ,服务器编号 as serverNo,插入时间 as addTime,服务器ID as serverId,服务器名称 as serverName,服务器值 as serverVal,列表排序 as sortList, 是否经营 as isOperate
from (
select ROW_NUMBER() over(order by 服务器编号) as row, * from 游戏中心.字典_游戏直冲_服务器
where (@服务器编号 = '' or 服务器编号 = @服务器编号)and
(@服务器ID = '' or 服务器ID = @服务器ID)and
(服务器名称 = @服务器名称 or 服务器名称 like '%' + @服务器名称 + '%')and
(@服务器值 = '' or 服务器值 = @服务器值)
) as S
where row between @beginNum and @beginNum + @pageSize - 1;


select @count=COUNT(*) from 游戏中心.字典_游戏直冲_服务器
where (@服务器编号 = '' or 服务器编号 = @服务器编号)and
(@服务器ID = '' or 服务器ID = @服务器ID)and
(服务器名称 = @服务器名称 or 服务器名称 like '%' + @服务器名称 + '%')and
(@服务器值 = '' or 服务器值 = @服务器值);
END

 

 

 

posted @ 2013-09-18 12:02  小刘_php  阅读(111)  评论(0)    收藏  举报