USE YourDBName
GO
/****** Object: StoredProcedure [dbo].[ApPaginationCommon] Script Date: 02/17/2012 21:32:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
功能描述: 通用分页显示查询,返回2个表数据,第一个为记录总行数
如果有自增标识字段,在@strGetFields中不要加入此字段信息,
如果非要加入的话,要 (fldName + 0) AS fldName 这样处理;
输入参数:
@tblName: 表名
@strGetFields: 需要返回的列 '*':返回所以列信息
@PageSize: 页尺寸
@PageIndex: 页码
@doCount: 返回记录总数, 非 0 值则返回
@strOrderBy: 排序字段信息,(注意: 不要加 ORDER BY)
格式: Field1 DESC, Field2 ASC
@strWhere: 查询条件,(注意: 不要加 WHERE)
修改者: Onion
创建时间: 2012-02-17
更改纪录:
*/
CREATE PROCEDURE [dbo].[ApPaginationCommon]
(
@tblName varchar(255),
@strGetFields varchar(1000) = '*',
@strWhere varchar(1500) = '',
@strOrderBy varchar(500) = '',
@PageSize int = 10,
@PageIndex int = 1
)
AS
-- 主语句
DECLARE @strSQL varchar(5000) SET @strSQL = ''
DECLARE @RecordCount int
-- 排序变量
DECLARE @strOrder varchar(400) SET @strOrder = ''
SET @RecordCount = 0
--如果@doCount传递过来的不是0,就执行总数统计
DECLARE @sWhere varchar(2000)
SET @sWhere = ''
IF (@strWhere != '')
SET @sWhere = ' WHERE ' + @strWhere
SET @strSQL='SELECT COUNT(*) AS Total FROM [' + @tblName + '] ' + @sWhere
EXEC (@strSQL)
--排序字段信息
IF (@strOrderBy != '')
SET @strOrder = ' ORDER BY ' + @strOrderBy
--如果是第一页就执行以上代码,这样会加快执行速度
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 ' + @strGetFields + ' FROM #tmpTable WHERE IID > ' + str((@PageIndex-1)*@PageSize) + ' DROP TABLE #tmpTable'
END
--PRINT @strSQL
--执行分页查询
EXEC (@strSQL)
GO