新鲜出炉的分页存储过程(SQL Server 2005下的):/*----------------------------------------------------------------------------------- * 通用分页存储过程,支持指定查询字段、指定表格或视图、指定排序字段、 * 指定查询条件等的简单查询 * * 使用了SQL Server 2005的Row_Number()函数进行的快速分页查询 * * 参数说明: * ----------------------------------------------------------------------------------- * @PageSize int 分页的每页条目大小 * @PageNo int 当前页码数(最小为1) * @TableName varchar(200) 要查询的表格名称或者视图名称 * @Fields varchar(1000) 查询的字段,可以写成:'*',或者'id,name,...' * @Condition varchar(1000) 查询的条件,不包含关键字Where,可以写成: * ' id>202 and len(name)>5 ' * @OrderCondition varchar(500) 排序条件,不包含关键字 Order By ,可以写成: * ' id desc, name asc ' * @TotalCount int 符合条件的所有条目数量,是返回参数 ------------------------------------------------------------------------------------*/ CREATE Procedure [dbo].[sp_common_cuspage2] ( @PageSize int, @PageNo int, @TableName nvarchar(200), @Fields nvarchar(1000), @Condition nvarchar(1000), @OrderCondition nvarchar(500), @TotalCount int out ) AS Begin declare @sqlCount nvarchar(2000) declare @execSql nvarchar(2000) --先查询符合条件的总条目数 SET @sqlCount = N'select @total = count(*) from ' + @TableName IF(len(@Condition)>0) SET @sqlCount = @sqlCount + N' where '+@Condition --print @sqlCount exec sp_executesql @sqlCount, N' @total int output ', @TotalCount output declare @begin int declare @end int IF(@PageNo<1) SET @PageNo = 1 set @begin = @PageSize * (@PageNo-1) set @end = @PageSize * @PageNo +1 --分页查询 SET @execSql = N'SELECT * FROM (' SET @execSql = @execSql + N'SELECT Row_Number() OVER(ORDER BY '+@OrderCondition+N') as RowNumber,'+@Fields+N' FROM '+ @TableName IF(len(@Condition)>0) SET @execSql = @execSql + ' WHERE '+@Condition SET @execSql = @execSql + N') G0 ' SET @execSql = @execSql + N' WHERE RowNumber>'+CAST(@begin as nvarchar) + N' AND RowNumber<'+CAST(@end as nvarchar) --print @execSql exec(@execSql) End GO
* 通用分页存储过程,支持指定查询字段、指定表格或视图、指定排序字段、
* 指定查询条件等的简单查询
*
* 使用了SQL Server 2005的Row_Number()函数进行的快速分页查询
*
* 参数说明:
* -----------------------------------------------------------------------------------
* @PageSize int 分页的每页条目大小
* @PageNo int 当前页码数(最小为1)
* @TableName varchar(200) 要查询的表格名称或者视图名称
* @Fields varchar(1000) 查询的字段,可以写成:'*',或者'id,name,...'
* @Condition varchar(1000) 查询的条件,不包含关键字Where,可以写成:
* ' id>202 and len(name)>5 '
* @OrderCondition varchar(500) 排序条件,不包含关键字 Order By ,可以写成:
* ' id desc, name asc '
* @TotalCount int 符合条件的所有条目数量,是返回参数
------------------------------------------------------------------------------------*/
CREATE Procedure [dbo].[sp_common_cuspage2]
(
@PageSize int,
@PageNo int,
@TableName nvarchar(200),
@Fields nvarchar(1000),
@Condition nvarchar(1000),
@OrderCondition nvarchar(500),
@TotalCount int out
)
AS
Begin
declare @sqlCount nvarchar(2000)
declare @execSql nvarchar(2000) --先查询符合条件的总条目数
SET @sqlCount = N'select @total = count(*) from ' + @TableName
IF(len(@Condition)>0)
SET @sqlCount = @sqlCount + N' where '+@Condition
--print @sqlCount
exec sp_executesql @sqlCount, N' @total int output ', @TotalCount output declare @begin int
declare @end int
IF(@PageNo<1) SET @PageNo = 1 set @begin = @PageSize * (@PageNo-1)
set @end = @PageSize * @PageNo +1 --分页查询
SET @execSql = N'SELECT * FROM ('
SET @execSql = @execSql + N'SELECT Row_Number() OVER(ORDER BY '+@OrderCondition+N') as RowNumber,'+@Fields+N' FROM '+ @TableName
IF(len(@Condition)>0)
SET @execSql = @execSql + ' WHERE '+@Condition
SET @execSql = @execSql + N') G0 '
SET @execSql = @execSql + N' WHERE RowNumber>'+CAST(@begin as nvarchar) + N' AND RowNumber<'+CAST(@end as nvarchar)
--print @execSql
exec(@execSql)
End
GO