这是经我该写后的存储过程
---------------------------------------------------------
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
/*
作者:郭新行
功能:实现数据分页
描述:此过程功能实现对数据的分页,输入的参数中 @SelectFieldName,@tbName,@strWhere,
@OrderFieldName 合起来为一个完整的Select查询语句,此语句中不能包含中间表
*/
ALTER PROCEDURE usp_GetRecordFromPage
@tblName varchar(1000), -- 表名
@SelectFieldName varchar(4000), -- 要显示的字段名(不要加select)
@strWhere varchar(4000), -- 查询条件(注意: 不要加 where)
@OrderFieldName varchar(255), -- 排序索引字段名
@PageSize int , -- 页大小
@PageIndex int = 1, -- 页码
@iRowCount int output, -- 返回记录总数
@OrderType bit = 0 -- 设置排序类型, 非 0 值则降序
AS
DECLARE @strSQL VARCHAR(4000) -- 主语句
DECLARE @strTmp VARCHAR(4000) -- 临时变量
DECLARE @strOrder VARCHAR(1000) -- 排序类型
DECLARE @strRowCount NVARCHAR(4000) -- 用于查询记录总数的语句
SET @OrderFieldName=ltrim(rtrim(@OrderFieldName))
SET @SelectFieldName=ltrim(rtrim(@SelectFieldName))
SET @strWhere =ltrim(rtrim(@strWhere))
IF @SelectFieldName=''
BEGIN
SET @SelectFieldName=' * '
END
IF @OrderType != 0
BEGIN
SET @strTmp = '<(select min'
SET @strOrder = ' order by ' + @OrderFieldName +' desc'
END
ELSE
BEGIN
SET @strTmp = '>(select max'
SET @strOrder = ' order by ' + @OrderFieldName +' asc'
END
IF @strWhere != ''
BEGIN
SET @strSQL = 'select top ' + ltrim(rtrim(str(@PageSize)))+' ' + @SelectFieldName+' from '
+ @tblName + ' where ' + @OrderFieldName + @strTmp + '('
+ right(@OrderFieldName,len(@OrderFieldName)-charindex('.',@OrderFieldName)) + ') from (select top ' + ltrim(rtrim(str((@PageIndex-1)*@PageSize)))+' '
+ @OrderFieldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
END
ELSE
BEGIN
SET @strSQL = 'select top ' + ltrim(rtrim(str(@PageSize)))+' ' + @SelectFieldName+' from '
+ @tblName + ' where ' + @OrderFieldName + @strTmp + '('
+ right(@OrderFieldName,len(@OrderFieldName)-charindex('.',@OrderFieldName)) + ') from (select top ' + ltrim(rtrim(str((@PageIndex-1)*@PageSize)))+' '
+ @OrderFieldName + ' from ' + @tblName + @strOrder + ') as tblTmp)'
+ @strOrder
END
IF @PageIndex = 1
BEGIN
SET @strTmp = ''
IF @strWhere != ''
BEGIN
SET @strTmp = ' where ' + @strWhere
END
SET @strSQL = 'select top ' + ltrim(rtrim(str(@PageSize)))+ ' ' + @SelectFieldName+' from '
+ @tblName + @strTmp + ' ' + @strOrder
END
PRINT(@strSQL)
EXEC(@strSQL)
IF @strWhere!=''
BEGIN
SET @strRowCount = 'select @iRowCount=count(*) from ' + @tblName+' where '+@strWhere
END
ELSE
BEGIN
SET @strRowCount = 'select @iRowCount=count(*) from ' + @tblName
END
EXEC sp_executesql @strRowCount,N'@iRowCount int out',@iRowCount out
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO