ALTER PROCEDURE [dbo].[PagingProc] @PageIndex INT, --当前页码从0开始 @PageSize INT, --每页的大小 @TableName NVARCHAR(100), --表名称 @Orders NVARCHAR(100), --排序 @Columns NVARCHAR(100), --需要检索的列集合,中间用英文逗号隔开e.g.:ID,NAME @Filters NVARCHAR(100), --过滤条件语句 @TotalPages INT OUTPUT AS BEGIN DECLARE @SQL NVARCHAR(200) --查询当前页所有记录的sql语句 DECLARE @PAGESSQL NVARCHAR(200) --查询行数的sql语句 DECLARE @TOTALCOUNT INT --一共得行数,用于计算所总页数 SET NOCOUNT ON IF @Filters <> '' SET @PAGESSQL = 'SELECT @TOTALCOUNT = COUNT(*) FROM ' + @TableName + ' WHERE ' + @Filters ELSE SET @PAGESSQL = 'SELECT @TOTALCOUNT = COUNT(*) FROM ' + @TableName EXEC SP_EXECUTESQL @PAGESSQL, N'@TOTALCOUNT INT OUT',@TOTALCOUNT OUT SET @TotalPages = Ceiling(CONVERT(REAL,@TOTALCOUNT) / CONVERT(REAL,@PageSize))--计算页数 SET @SQL='SELECT TOP ' + CAST(@PageSize as varchar(10)) + ' ' + @Columns + ' FROM ' + @TableName + ' WHERE ID NOT IN ( SELECT TOP ' + CAST(@PageIndex * @PageSize as varchar(10)) + ' ID FROM ' + @TableName IF @Filters <> '' SET @SQL = @SQL + ' WHERE ' + @Filters IF @Orders <> '' SET @SQL = @SQL + ' ORDER BY ' + @ORDERS SET @SQL = @SQL + ')' IF @Filters <> '' SET @SQL = @SQL + ' AND ' + @Filters IF @Orders <> '' SET @SQL = @SQL + ' ORDER BY ' + @ORDERS EXEC(@SQL) END 下面是C#代码
using System; using System.Collections.Generic; using System.Linq; using System.Text;