一个基于ROW_NUMBER()的通用分页存储过程代码_MsSql

建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了。
注意:数据量大、性能要求高的,请个性化处理。

复制代码 代码如下:

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

时间: 2024-09-19 17:25:39

一个基于ROW_NUMBER()的通用分页存储过程代码_MsSql的相关文章

一个基于ROW_NUMBER()的通用分页存储过程代码

建立好如下的存储过程,以后要分页,直接调用改存储过程就可以了. 注意:数据量大.性能要求高的,请个性化处理. 复制代码 代码如下: ALTER PROCEDURE [dbo].[COMMON_PROCEDURE_SelectWithPage] @Sql VARCHAR(5000), @CurrentPageNo INT, @PageSize INT, @TotalNum INT OUTPUT AS SET NOCOUNT ON DECLARE @SqlCmd VARCHAR(5000) ----

基于Sql Server通用分页存储过程的解决方法_MsSql

sql server2000分页方式很多,效率吗  当到达10万级以上就有些吃力了,这里暂时不例出来了 sql server2005以上就有了row_number 也是一大进步,详情如下参考 复制代码 代码如下: Sql Server2005通用分页存储过程 CREATE PROCEDURE [dbo].[Common_GetPagedList](@TableName nvarchar(100), --表名@ColumnNames nvarchar(1000) = '*', --字段名集合(全部

1>通用分页存储过程代码及调用

Java代码   /*****************************************************  MySQL分页存储过程  吴剑 2009-07-02    *****************************************************/   DROP PROCEDURE IF EXISTS pr_pager;   CREATE PROCEDURE pr_pager(       IN     p_table_name        V

一个分页存储过程代码_MsSql

复制代码 代码如下: ------------------------------------ --用途:分页存储过程(对有主键的表效率极高) --说明: ------------------------------------ ALTER PROCEDURE [UP_GetRecordByPage] @tblName varchar(255), -- 表名 @fldName varchar(255), -- 主键字段名 @PageSize int = 10, -- 页尺寸 @PageIndex

sqlserver 千万数量级分页存储过程代码_MsSql

复制代码 代码如下: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go Create PROCEDURE [dbo].[SP_Pagination] /**//* *************************************************************** ** 千万数量级分页存储过程 ** *************************************************************** 参

数据库分页存储过程代码_MsSql

复制代码 代码如下: /*  数据库分页存储过程,支持倒序和升序  参数说明:    @tablename:为搜索表名    @tablefield:为表的字段,约定为表的主键,    @where:为搜索表名,要显示所有记录请设为"1=1"    @orderby:为搜索结果排序,如order by id desc    @fieldlist:为字段列表,如userid, username    @curpage:当前页码    @page_record:每页记录条数    @Sor

目前用到的两个分页存储过程代码_MsSql

第一个,取得数据总行数 复制代码 代码如下: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [sq8reyoung].[fenye_num] ( @TableNames NVARCHAR(200), @Filter nvarchar(200)) AS IF @Filter = '' SET @Filter = ' WHERE 1=1' ELSE SET @Filter = ' WHERE ' + @Filter EXE

分页存储过程代码_MsSql

复制代码 代码如下: /* *@curentpage 当前页 *@pagesize 每页记录数 *@TableName 表名 *@key 主键(自动排序) *@where 查询条件 1)空为 null 2)有查询条件不要带where *@order '0'表示 desc '1'是asc *@pageCount 总页数 */ create procedure Page @currentpage int,@pagesize int, @TableName varchar(30),@key varch

通用分页存储过程,源码共享,大家共同完善_MsSql

好久没有上来写点东西了,今天正好有空,共享一些个人心得,就是关于分页的存储过程,这个问题应该是老生重谈了,网上的通用存储过程的类型已经够多了,但是,好象看到的基本上不能够满足一些复杂的SQL语句的分页(也可能是我不够见多识广啊,呵呵),比如下面这句:  select '' as CheckBox, A.TargetID, A.TargetPeriod, Convert(varchar(10), B.BeginDate, 120) as BeginDate,      Convert(varcha