ALTER PROCEDURE [dbo].[PagingProc] @PageIndex INT, --當(dāng)前頁(yè)碼從0開(kāi)始 @PageSize INT, --每頁(yè)的大小 @TableName NVARCHAR(100), --表名稱(chēng) @Orders NVARCHAR(100), --排序 @Columns NVARCHAR(100), --需要檢索的列集合,中間用英文逗號(hào)隔開(kāi)e.g.:ID,NAME @Filters NVARCHAR(100), --過(guò)濾條件語(yǔ)句 @TotalPages INT OUTPUT AS BEGIN DECLARE @SQL NVARCHAR(200) --查詢(xún)當(dāng)前頁(yè)所有記錄的sql語(yǔ)句 DECLARE @PAGESSQL NVARCHAR(200) --查詢(xún)行數(shù)的sql語(yǔ)句 DECLARE @TOTALCOUNT INT --一共得行數(shù),用于計(jì)算所總頁(yè)數(shù) 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))--計(jì)算頁(yè)數(shù) 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;