zoukankan      html  css  js  c++  java
  • 高效sql2005分页存储过程

    高效分页存储过程

    --分页存储过程示例
    Alter PROCEDURE [dbo].[JH_PageDemo]
     @pageSize int = 9000000000,
     @pageIndex int = 1 ,
     @orderBy   Nvarchar(200) = '' -- 不加order By
    AS
    SET NOCOUNT ON
    --声明变量
    DECLARE @select   VARCHAR(3048);
    DECLARE @from       VARCHAR(512);
    DECLARE @RowNumber   VARCHAR(256);
    DECLARE @condition  nVARCHAR(3990);
    DECLARE @groupBy varchar(50);
    DECLARE @sql    VARCHAR(3998);
    DECLARE @RowStartIndex INT;
    DECLARE @RowEndIndex INT;
    BEGIN
     SET NOCOUNT on
     IF @orderBy <> ''
      Set @orderBy = ' ORDER BY  '  + @orderBy;
     else
      Set @orderBy = ' ORDER BY Userid ' ;
     SET @select = ' select userid,username ,';
     --设置排序语句
     SET @RowNumber ='ROW_NUMBER() OVER (' + @orderBy + ' ) as RowNumber ';  
     SET @select = @select  + @RowNumber;
     
       SET @from = ' FROM users  ';
     --设置条件语句@GULevel
     SET @condition = '  WHERE 1=1 '; 
     SET @condition = @condition  + 'AND userid > 0';
     --分组语句
     SET @groupBy = ' GROUP BY USerID '
     
     SET @RowStartIndex = ( @pageIndex -1) * @pageSize + 1
     SET @RowEndIndex =  @pageIndex  * @pageSize ;
     
     --查询结果 
     SET @sql = 'SET NOCOUNT ON; 
     WITH ResultTable AS ( ' + @select + @from + @condition +')
     SELECT * FROM ResultTable WHERE RowNumber between ' +
     Cast(@RowStartIndex AS VARCHAR(32)) + ' AND ' + CAST(@RowEndIndex AS VARCHAR(32))
     + '  ; SELECT  count(*) as totalcount  '  + @from + @condition + '  '
     ;
     --PRINT @sql;
     EXEC(@sql); 
     
    END
    

      

    --分页存储过程示例
    Alter PROCEDURE [dbo].[JH_PageDemo]
     @pageSize int = 9000000000,
     @pageIndex int = 1 ,
     @orderBy   Nvarchar(200) = '' -- 不加order By
    AS
    SET NOCOUNT ON
    --声明变量
    DECLARE @select   VARCHAR(3048);
    DECLARE @from       VARCHAR(512);
    DECLARE @RowNumber   VARCHAR(256);
    DECLARE @condition  nVARCHAR(3990);
    DECLARE @groupBy varchar(50);
    DECLARE @sql    VARCHAR(3998);
    DECLARE @RowStartIndex INT;
    DECLARE @RowEndIndex INT;

    BEGIN
     SET NOCOUNT on
     IF @orderBy <> ''
      Set @orderBy = ' ORDER BY  '  + @orderBy;
     else
      Set @orderBy = ' ORDER BY Userid ' ;

     SET @select = ' select userid,username ,';

     --设置排序语句
     SET @RowNumber ='ROW_NUMBER() OVER (' + @orderBy + ' ) as RowNumber ';  
     SET @select = @select  + @RowNumber;
     
       SET @from = ' FROM users  ';

     --设置条件语句@GULevel
     SET @condition = '  WHERE 1=1 '; 
     SET @condition = @condition  + 'AND userid > 0';

     --分组语句
     SET @groupBy = ' GROUP BY USerID '
     
     SET @RowStartIndex = ( @pageIndex -1) * @pageSize + 1
     SET @RowEndIndex =  @pageIndex  * @pageSize ;
     
     --查询结果 
     SET @sql = 'SET NOCOUNT ON; 
     WITH ResultTable AS ( ' + @select + @from + @condition +')
     SELECT * FROM ResultTable WHERE RowNumber between ' +
     Cast(@RowStartIndex AS VARCHAR(32)) + ' AND ' + CAST(@RowEndIndex AS VARCHAR(32))
     + '  ; SELECT  count(*) as totalcount  '  + @from + @condition + '  '
     ;
     --PRINT @sql;
     EXEC(@sql); 
     
    END

  • 相关阅读:
    postgresql创建表
    PG查询数据库大小
    unicode字符集范围
    删除mysql数据中的空格和换行符
    无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull
    ubuntu 16.04 64位 coreseek
    linux wps 缺失字体问题解决
    误删除/var/lib/dpkg解决办法
    Microsoft Office CVE-2017-8570
    mariadb ==> 开机自启动
  • 原文地址:https://www.cnblogs.com/joke168/p/3546318.html
Copyright © 2011-2022 走看看