SQL Server 分页查询存储过程代码


  本文标签:分页,存储过程

复制代码 代码如下:

CREATE PROCEDURE [dbo].[up_Pager]
@table varchar(2000), --表名
@col varchar(50), --按该列来进行分页
@orderby bit, --排序,0-顺序,1-倒序
@collist varchar(800),--要查询出的字段列表,*表示全部字段
@pagesize int, --每页记录数
@page int, --指定页
@condition varchar(800) --查询条件
AS
DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800),
@total_Item int,@total_Page int
IF @condition is null or rtrim(@condition)=
BEGIN--没有查询条件
SET @where1= WHERE
SET @where2=
END
ELSE
BEGIN--有查询条件
SET @where1= WHERE (+@condition+) AND --本来有条件再加上此条件
SET @where2= WHERE (+@condition+) --原本没有条件而加上此条件
END
SET @sql=SELECT @total_Item=CEILING((COUNT(*)+0.0)+) FROM +@table+ @where2
EXEC sp_executesql @sql,N@total_Item int OUTPUT,@total_Item OUTPUT --计算总条数
set @total_Page = Ceiling((@total_Item+0.0)/@pagesize) --计算页总数

IF @orderby=0
SET @sql=SELECT TOP +CAST(@pagesize AS varchar)+ +@collist+
, + CAST(@total_Item AS varchar) + as total_Item +
, +CAST(@total_Page AS varchar) + as total_Page +
FROM mailto:+@table+@where1+@col+%3E(SELECT MAX(+@col+) +
FROM (SELECT TOP +CAST(@pagesize*(@page-1) AS varchar)+ +
@col+ FROM +@table+@where2+ORDER BY +@col+) t) ORDER BY +@col
ELSE
SET @sql=SELECT TOP +CAST(@pagesize AS varchar)+ +@collist+
, + CAST(@total_Item AS varchar) + as total_Item +
, +CAST(@total_Page AS varchar) + as total_Page +
FROM mailto:+@table+@where1+@col+%3C(select MIN(+@col+) +
FROM (SELECT TOP +CAST(@pagesize*(@page-1) AS varchar)+ +
@col+ FROM +@table+@where2+ORDER BY +@col+ DESC) t) ORDER BY +
@col+ DESC
IF @page=1--第一页
SET @sql=SELECT TOP +CAST(@pagesize AS varchar)+ +@collist+
, + CAST(@total_Item AS varchar) + as total_Item +
, +CAST(@total_Page AS varchar) + as total_Page +
FROM +@table+
@where2+ORDER BY +@col+CASE @orderby WHEN 0 THEN ELSE DESC END
--print @sql
EXEC(@sql)

在SQL中测试(教你如何使用)
复制代码 代码如下:

EXEC up_Pager (SELECT * FROM 表名)aa,要排序的列名,0-顺序或1-倒序,显示列,每页记录数,指定页,条件
EXEC up_Pager (SELECT * FROM T_Gather_Page)aa,SaveTime,1,*,40,3,