我想将一张表中的数据分批加载。
例如第一次加载这张表的前1000条记录(表中的数据可以进行排序)。第二次加载1001-2000条数据。以此类推。请问这样的SQL语句应该怎么样写呢?

解决方案 »

  1.   

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

  2.   

    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
      

  3.   

    分页有多种思路,最简单的order by + fetch/top,分页提取 
      

  4.   

    newidwhere isnull(left(cast(newid as varchar),len(cast(newid as varchar))-3),'0') = 页
      

  5.   

    select top  1000 *
    from sparebase
    where (spareid > 
    (select top 1 (spareid)
    from (select top 1000 spareid
    from sparebase
    order by spareid) a 
    order by spareid desc))
    order by spareid
      

  6.   

    数据库(Access\Oracle\MSSQL)都不告诉是什么,怎么告诉你方法?
      

  7.   

    limit 0, 1000
    limit 1000, 1000
    ??
      

  8.   

    我想将一张表中的数据分批加载。 
    “加载”两个字和楼上的各位可能理解不同。
    不知道楼主是不是只是想将数据表分批加载到内存中以提高效率,而不是显示出来。
    如果是这样的话,那么没有必要去分页,只需要Select * From Table即可。但是在控件上需要做些调整:
    设置数据库控件的CursorLocation属性为clUseServer(这个属性将游标放在服务器端,读取数据就不会将查询结果整个儿的传输到客户端内存中)
    设置数据库控件的CacheSize为需要的值,比如1000(这个值会涉及到每次加载到内存的数据量)