通用分页显示查询存储过程
/* 
功能描述: 通用分页显示查询 
条件:表中不存在标示递增字段 
输入参数: 
@tblName: 表名 
@strGetFields: 需要返回的列 '*':返回所以列信息 
@fldName: 排序的字段名 
@OrderType: 设置排序类型, 非 0 值则降序 
@PageSize: 页尺寸 
@PageIndex: 页码 
@doCount: 返回记录总数, 非 0 值则返回 
@strOrderBy: 缺省排序字段信息 (注意: 不要加 ORDER BY) 
格式: Field1 DESC,Field2 ASC, 
@strWhere: 查询条件 (注意: 不要加 WHERE) 
输出参数: @RecordCount: 记录总数 
更改纪录: 
*/ 
ALTER PROCEDURE Pagination2 
( 
@tblName varchar(255), 
@strGetFields varchar(1000) = '*', 
@fldName varchar(255) = '', 
@PageSize int = 10, 
@PageIndex int = 1, 
@doCount bit = 0, 
@OrderType bit = 0, 
@strOrderBy varchar(500) = '', 
@strWhere varchar(1500) = '', 
@RecordCount int output 
) 
AS 
DECLARE @strSQL varchar(5000) — 主语句 
DECLARE @strTmp varchar(200) — 临时变量 
DECLARE @strOrder varchar(400) — 排序变量 
–如果@doCount传递过来的不是0,就执行总数统计 
IF (@doCount != 0) 
BEGIN 
DECLARE @sWhere varchar(2000) 
SET @sWhere = '' 
IF (@strWhere != '') 
SET @sWhere = ' WHERE ' + @strWhere 
SET @strSQL = 'if exists (select * from dbo.sysobjects where id = object_id(''[dbo].[tmpTable]'') and OBJECTPROPERTY(id, ''IsUserTable'') = 1) ' 
SET @strSQL = @strSQL + ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [' + @tblName + '] ' + @sWhere + ') ' 
SET @strSQL = @strSQL + ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [' + @tblName + '] ' + @sWhere 
EXEC (@strSQL)
SELECT @RecordCount=Total FROM tmpTable
–删除总数统计临时表 
EXEC ('DROP TABLE tmpTable') 
END 
–PRINT @RecordCount
–如果@OrderType不是0,就执行降序 
IF (@OrderType != 0) 
BEGIN 
SET @strTmp = '  (SELECT MAX' 
SET @strOrder = ' ORDER BY ' + @strOrderBy + '[' + @fldName + '] ASC' 
END 
–如果是第一页就执行以上代码,这样会加快执行速度 
IF @PageIndex = 1 
BEGIN 
IF @strWhere != '' 
SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM [' + @tblName + '] WHERE ' + @strWhere + ' ' + @strOrder 
ELSE 
SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM ['+ @tblName + '] '+ @strOrder 
END 
ELSE 
BEGIN 
–为搜索表建立自动编号 保存到临时表中 
SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFields + ' INTO #tmpTable FROM [' + @tblName + ']' 
IF @strWhere != '' 
SET @strSQL = @strSQL + ' WHERE ' + @strWhere + ' ' + @strOrder 
ELSE 
SET @strSQL = @strSQL + @strOrder 
–以下代码赋予了@strSQL以真正执行的SQL代码 
SET @strSQL = @strSQL + ' SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM #tmpTable' 
+ ' WHERE IID ' + @strTmp + '(IID) FROM (SELECT TOP ' + str((@PageIndex-1)*@PageSize) + ' IID FROM #tmpTable) AS tblTmp) DROP TABLE #tmpTable' 
END 
–PRINT @strSQL
–执行分页查询 
EXEC (@strSQL)
