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

浙公网安备 33010602011771号