一个基于ROW_NUMBER()的通用分页存储过程代码
2010-10-22 00:00
841 查看
建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。
注意:数据量大、性能要求高的,请个性化处理。
注意:数据量大、性能要求高的,请个性化处理。
ALTER PROCEDURE [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql VARCHAR(5000), @CurrentPageNo INT, @PageSize INT, @TotalNum INT OUTPUT AS SET NOCOUNT ON DECLARE @SqlCmd VARCHAR(5000) ------------------------------------------ --查询数据 SET @SqlCmd = 'SELECT * FROM (' + @Sql + ') A WHERE RowIndex BETWEEN ' + CONVERT(VARCHAR,(@CurrentPageNo-1) * @PageSize + 1) + ' AND ' + CONVERT(VARCHAR,@CurrentPageNo * @PageSize) EXEC(@SqlCmd) PRINT (@SqlCmd) ------------------------------------------ --求记录总数 IF @TotalNum = -1 BEGIN CREATE TABLE #Temp1(num INT) INSERT INTO #Temp1 EXEC('SELECT count(*) FROM (' + @Sql + ') A') SELECT @TotalNum=(SELECT * FROM #Temp1) DROP TABLE #Temp1 END 用法很简单,但必须在传入的SQL中使用ROW_NUMBER() OVER(...) AS RowIndex : DECLARE @Sql VARCHAR(5000) DECLARE @CurrentPageNo INT DECLARE @PageSize INT DECLARE @TotalNum INT SET @CurrentPageNo = 100 SET @PageSize = 10 SET @TotalNum = -1 SET @Sql = ' SELECT *, ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowIndex FROM 表名 A WITH (NOLOCK) ' EXEC [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql,@CurrentPageNo,@PageSize,@TotalNum OUTPUT SELECT @TotalNum
相关文章推荐
- 一个基于ROW_NUMBER()的通用分页存储过程代码
- sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)
- sqlserver 高效分页的存储过程 基于ROW_NUMBER()
- jquery.pagination.js 分页存储过程--基于ROW_NUMBER() OVER()分页
- SqlServer中使用row_number() over实现通用的分页存储过程
- [转]一个利用Sql Server 20005的 ROW_NUMBER Function 的分页存储过程.
- 一个利用Sql Server 20005的 ROW_NUMBER Function 的分页存储过程.
- 通用存储过程之四: 生成某一个表分页的存储过程
- 使用ROW_NUMBER()的分页存储过程
- 学习ROW_NUMBER(),高效分页存储过程
- 通用高效分页存储过程代码
- 一个通用的分页存储过程(原创)
- AspNetPager+ROW_NUMBER()的分页存储过程 【百万数据】
- 抛弃以往分页方式,改用ROW_NUMBER()加BETWEEN方式的分页存储过程,特此分享
- 一个通用的分页存储过程..............
- 通用高效分页存储过程代码
- 基于Mysql的通用分页存储过程
- 利用SQL2005的row_number()重新写了个自定义分页存储过程
- 一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境)
- 使用ROW_NUMBER()的分页存储过程