select IDENTITY(int,1,1) as iid,* into #temptable from yourtable order by a????
这样可以?

解决方案 »

  1.   

    select top 10 * from 
    (select top 20 * from YouTable order by TabID) as table1
    order by TabID desc
      

  2.   

    select IDENTITY(int,1,1) as iid,* into #temptable from yourtable order by a????
    是没有作用的。还有一个问题:当执行下一页的时候,又是重新生成临时表,浪费效率。有没有能够将结果集存储起来的方法,然后反复调用结果集。
    SQL Server 2000 中说有Table 的数据类型,好像就是临时表
      

  3.   


    如果有排列顺序,且是主键,可以利用
    select top m-n * from 
    (select top n-1 * from YouTable order by TabID) as table1 (m和n 之间的数据包含m,n)不管利用identity(int,1,1)的方法还是上面这种,都不妨碍你先把按照你的要求排好序的数据全部生成到临时表中,然后再按照这两种方法操作。不会总生成临时表阿?!
      

  4.   

    declare @SQLStr varchar(8000)
    set @SQLStr='SELECT Top '+cast(@每页大小 as varchar)+' * FROM 表 WHERE 主键列 NOT IN (SELECT TOP '+cast(@每页大小*@第几页 as varchar)+' 主键列 from 表 )'
    exec(@SQLStr)
      

  5.   

    我认为,楼主的方法的效率有问题,很多人都是要这样分页,其实不好。
    MSSQLSERVER并不区分第20条和第40条记录的,这是根据PK进行排序,所以最好不要强制给记录加一个行号。还是根据PK进行分页会比较高效。试试我的SPCREATE PROCEDURE GetProductsPaged
    @lastProductID int,
    @pageSize int
    AS
    SET ROWCOUNT @pageSize
    SELECT *
    FROM Products
    WHERE [standard search criteria]
    AND ProductID > @lastProductID
    ORDER BY [Criteria that leaves ProductID monotonically increasing]
    GO
      

  6.   

    select IDENTITY(int,1,1) as iid,* into #temptable from yourtable
    select top M-N * from #temptable where iid>=N问题不是出现在上面这种处理方法的效率上
    而是你实际的表是怎么设计的,在实际过程中又是如何使用的.如果你的表中根据没有主键,那当然是你的表设计不合理,要用上面的办法来解决如果你的表中有主键,用leimin(黄山光明顶) 的办法
    这样效率就高很多
    所以,方法是根据实际情况来选择的
    问题不是出在方法上,是出在你选择那种方法上
      

  7.   

    如果你是采用长连接,那么使用我的过程,至于排序也可以实现create procedure sp_vlist @table varchar(6),@feild1 varchar(2) as
    set nocount on
    declare @sqlcmd varchar(200)
    if object_id('tempdb..##vlist') is not null
      drop table ##vlist
    set @sqlcmd='select identity(int, 1,1) as id, * into ##vlist from '+@table+' where field1='''+@field1+''' order by fieldn
    create index ##vlist_id on ##vlist(id)'
    exec(@sqlcmd)
    set nocount off以上的过程适用于所有表,过程变量@field1是为了演示如何处理不连续记录,过程中order by fieldn是对fieldn进行排序,如果你的排序是针对主键进行,那么删除这句以提高效率;
    创建noncluster index是为了提高分页效率。在分页代码中你可以使用select * from ##vlist where id between m and n,这样可以完成连续的分页,例如你的虚拟列表完成1——25,2——26,...,效率几乎和查询分析器一致!另外这里如果有人知道查询分析器是如何完成大数据查询显示或者知道效率更高的分页方法,可以提出来讨论!