MSSQL数据分页

数据分页 是我们在所有的项目中都必须用到的功能:
以下将常用的分页方法思路记载如下:

1 如果查询的为第一页,我们可以采用 select top 的方式快速的展示第一页
2 采用普通的 top not in 或者 between方法 实现

分页存储过程如下:

CREATE PROCEDURE fenYe
— 获得某一页的数据 —
@thisPage int = 1,
— 当前页
@fieldList varchar(max) = ‘*’,
— 需要展示的字段信息(列1,列2,……)
@tableName varchar(2000),
— 需分页的表名或视图名
@whereList varchar(2000) = ”,
— 查询条件 (即 where condition……) 不用加where关键字
@ascField varchar(100) = ”,
— 排序的字段名 (即 order by field asc/desc)
@OrderType bit = 0,
— 排序的类型 (0为升序,1为降序)
@pkId varchar(50) = ”,
— 主键名称 作为分页关键字
@pageSize int = 20
— 分页大小

AS
BEGIN
— 临时变量定义–
DECLARE @strTemp varchar(max)
DECLARE @strSql varchar(max)
— 该存储过程最后执行的语句
DECLARE @strOrderType varchar(max)
— 排序类型语句 (order by field asc或者order by field desc)

BEGIN
IF @OrderType = 1
— OrderType=1即执行降序
BEGIN
SET @strOrderType = ‘ ORDER BY ‘+@ascField+’ DESC’
SET @strTemp = ‘<(SELECT min' END ELSE BEGIN SET @strOrderType = ' ORDER BY '+@ascField+' ASC' SET @strTemp = '>(SELECT max’
END

IF @thisPage = 1 — 如果是第一页 (采用 top的方式执行)
BEGIN
IF @whereList != ”
SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+’ ‘+@fieldList
+’ FROM ‘+@tableName+’ WHERE ‘+@whereList+@strOrderType
ELSE
SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+’ ‘+
@fieldList+’ FROM ‘+@tableName+@strOrderType
END

ELSE — 其他页
BEGIN
IF @whereList !=”
SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+’ ‘+@fieldList+
‘ FROM ‘+@tableName+’ WHERE ‘+@whereList+’ AND ‘+
@pkId+@strTemp+'(‘+@pkId+’)’+’ FROM (SELECT TOP
‘+STR((@thisPage-1)*@pageSize)+’ ‘+@pkId+’ FROM
‘+@tableName+@strOrderType+’) AS TabTemp)’+@strOrderType
ELSE
SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+’ ‘+@fieldList
+’ FROM ‘+@tableName+’ WHERE ‘+@pkId+@strTemp+'(‘+@pkId+’)’
+’ FROM (SELECT TOP ‘+STR((@thisPage-1)*@pageSize)+’ ‘+@pkId+
‘ FROM ‘+@tableName+@strOrderType+’) AS TabTemp)’+@strOrderType
END

END
EXEC (@strSql)
END

exec fenYe 1,’*’,’TableName’,”,’CreateDate’,1,’ID’,50

上面表示,查询表TableName的所有字段,前50条记录,因为是第一页,排序字段为CreateDate,降序排列,主键是ID。