select IDENTITY(int, 1,1) AS ID_Num,* into #temp from 表
select * from #temp where ID_Num between 10 and 20

解决方案 »

  1.   

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

  2.   

    楼上的能说说这个做什么用?放了一个临时表?
    select IDENTITY(int, 1,1) AS ID_Num,* into #temp from 表
    select * from #temp where ID_Num between 10 and 20
      

  3.   


    create proc 分页浏览
    @begin int,
    @end int
    as
    select IDENTITY(int, 1,1) AS ID_Num,* into #temp from 你的表
    select * from #temp where ID_Num between @begin and @end
    go--调用:
    exec 分页浏览 50,100
      

  4.   

    回复人: xpilot(飞行石) ( ) 信誉:104  2003-05-23 00:33:00  得分:0 
     
     
      大力的意思是用临时表取代游标,既然是做分页程序,性能肯定是首要考虑的问题,游标在各方面性能来说都不如临时表满意!
      
    -------------------------------- 
    但是游标使用得当的话,也是一个好用的咚咚啊,何况我这个存储过程排除了全表扫描的过程,只有那个计算总行数的函数,如果在某一个字段存储了就根本不需要进行扫描。我封装在.NET程序里面进行了压力测试,能顶得住大概150左右的冲击量。
    数据是用程序添加的大概2,000,000行,添加了我一整天啊。
      

  5.   

    回复人: pengdali(大力) ( ) 信誉:419  2003-05-22 23:52:00  得分:0 
     
     
      对
    create proc 分页浏览
    @begin int,
    @end int
    as
    select IDENTITY(int, 1,1) AS ID_Num,* into #temp from 你的表
    select * from #temp where ID_Num between @begin and @end
    go--调用:
    exec 分页浏览 50,100  
     
    --------------------------
    select IDENTITY(int, 1,1) AS ID_Num,* into #temp from 你的表
    大力兄,这个好像不太合适吧,我试了一下,原来就有一个列是自动编号的,嘿嘿,再加一个就出错了。
      

  6.   

    你的实现方法确实是不错的,你说可以消除全表扫描的过程这也不错,但游标每次打开是所花费的代价实在太高了,况且你实现的还是Scroll Cursor,我感觉大力的做法还是好的,虽然我没测试过,但我想性能应当比你的要高。在数据库编程方面一般不到万不得已的时候是不会使用游标的,至少我是这样认为的,如果可以的话各位可以交个朋友,我的QQ:14234884,MSN:SSGZHL.HOTMAIL.COM
      

  7.   

    select IDENTITY(int, 1,1) AS ID_Num,cast(你原来的id列 as int) 别名,其他列 into #temp from 表
      

  8.   

    还是我来作个总结吧,大力兄牛,但是也倏忽了一点:1.分页程序这样每次建立临时表,不觉得有点浪费吗?
    尤其是对于VC开发的客户端程序,这种浪费是比较吓人的!2.建立临时表之后就不管了,也太粗心了吧,我看还是需要做点工作
    好了下面是我的一个分页过程,各位看看吧!--------------------------------------------------------create procedure sp_vlist @cpbmb varchar(6),@crbh varchar(2) with encryption as
    set nocount on
    declare @sqlcmd varchar(148)
    if object_id('tempdb..##vlist') is not null
      drop table ##vlist
    set @sqlcmd='select identity(int, 1,1) as id, * into ##vlist from '+@cpbmb+' where crbh='''+@crbh+''' order by cpxh
    create index ##vlist_id on ##vlist(id)'
    exec(@sqlcmd)
    set nocount off---------------------------------------------------
    ^_^,这只是个建立全局临时表的过程,这样即可一劳永逸,在你的分页程序中使用between进行检索,怎么样,不赖吧!