• SQL分页语句三方案


    方法一:

    SELECT TOP 页大小 *
    FROM table1
    WHERE id NOT IN
              (
              SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
              )
    ORDER BY id
    

     方法二:

    SELECT TOP 页大小 *
    FROM table1
    WHERE id >
              (
              SELECT ISNULL(MAX(id),0)
              FROM
                    (
                    SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
                    ) A
              )
    ORDER BY id
    

     方法二倒序:

    SELECT TOP 页大小 *
    FROM table1
    WHERE ID <=
        (
        SELECT ISNULL(MIN(ID),(SELECT MAX(ID) FROM table1 ))
        FROM
            (
            SELECT TOP (页大小*(页数-1)) ID FROM tbl_files ORDER BY ID DESC
            ) A
        )
    ORDER BY ID DESC
    

    方法三:

    SELECT TOP 页大小 *
    FROM
            (
            SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
            ) A
    WHERE RowNumber > 页大小*(页数-1)
    

    分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
    分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句
    分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用

    例子:

    以下轉載至http://www.cnblogs.com/zcttxs/archive/2012/04/01/2429151.html

    2.几种典型的分页sql,下面例子是每页50条,198*50=9900,取第199页数据。

     1 1:row_number()  over()
     2 select  top 50  * from (
     3 select Row_Number() over(order by id) as rownumber ,* from table)a
     4 where  rownumber >9900
     5 
     6 select  * from (
     7 select row_number() over(order by id)as rownumber,*from table)a
     8 where rownumber >9000  adn rownuber<9951
     9 
    10 2 not in 
    11 
    12 select top 50 * from  table
    13 where id not in (select top 9900  id  from table  order by id)
    14 order by id
    View Code
     1   
     2 
     3    ALTER PROCEDURE   存儲過程名
     4   (
     5  
     6     @tbName VARCHAR(255),            --表名
     7     @tbGetFields VARCHAR(1000)= '*',--返回字段
     8     @OrderfldName VARCHAR(255),        --排序的字段名
     9     @PageSize INT=20,               --页尺寸
    10     @PageIndex INT=1,               --页码
    11     @OrderType bit = 0,                --0升序,非0降序
    12     @strWhere VARCHAR(1000)='',     --查询条件
    13      --@TotalCount INT OUTPUT            --返回总记
    14 
    15   )
    16 AS
    17 
    18    BEGIN
    19     DECLARE @strSql VARCHAR(5000)    --主语句
    20     DECLARE @strSqlCount NVARCHAR(500)--查询记录总数主语句
    21     DECLARE @strOrder VARCHAR(300) -- 排序类型
    22  IF ISNULL(@strWhere,'')<>''
    23    set @strSqlCount='select @TotalCout=count(*) from '+@tbName+'
    24   where 1=1'+@strWhere
    25   else set @strSqlCount='select @TotalCount=count(*) from '+@tbName
    26 
    27 
    28       ------分頁
    29    IF  @PageIndex <=0 set @PageIndex =1
    30    IF(@OrderType<>0)  set @strOrder='ORDER BY'+@OrderfldName+'DESC'
    31    ELSE SET @strOrder=' ORDER by'+@OrderfldName+' ASC'
    32  
    33    SET @strSql='SELECT * FROM
    34     (SELECT ROW_NUMBER() OVER('+@strOrder+') RowNo,'+@tbGetFields+'FROM'+@tbName +' WHERE 1=1'+@strWhere+')tb
    35    where tb.RowNo between '+str((@PageIndex-1)*PageSize+1)+'AND' 
    36 +str(@PageIndex * @PageSize)
    37   
    38    exec(@strSql)
    39   select  @TotalCount
    40 end   
    41   
    42   
    43   
    利用存儲過程sql分頁
    111111
  • 相关阅读:
    mkdir()和mkdirs() 的区别
    JAVA 多线程学习
    遇到问题(1)
    7.12计划
    Android 中Int类型和String类型的转换
    Android Binder机制学习笔记
    7.11计划,做个没心没肺的人
    RTL行为级仿真、综合后门级功能仿真和时序仿真
    定向锚文本(高级) 站内站策略(高级) 链轮模式(高级) 站群模式(高级)
    优化长尾关键词基础指南
  • 原文地址:https://www.cnblogs.com/whl4835349/p/6047638.html
Copyright © 2020-2023  润新知