收录日期:2018/09/20 23:23:26 时间:2016/05/18 06:55:15 标签:基础类
CREATE PROCEDURE zpxxpageview  
(
@m_cname nvarchar(30),
@int_pagenow int=1,              
@int_pagesize int=7


AS 
set nocount on 

declare @int_allid int         
declare @int_beginid int,@int_endid int    
declare @int_pagebegin int, @int_pageend int 
     
select @int_allid=count(*) from zpxx where cname =@m_cname    
             
    declare cro_fastread cursor scroll 
    for select zpxxid from zpxx where cname =@m_cname order by zpxxid desc
      
    open cro_fastread 
    select @int_beginid=(@int_pagenow-1)*@int_pagesize+1
    select @int_endid = @int_beginid+@int_pagesize-1
     
    fetch absolute  @int_beginid from cro_fastread into @int_pagebegin 
    if @int_endid>@int_allid
        fetch last from cro_fastread into @int_pageend
    else 
        fetch absolute @int_endid from cro_fastread into @int_pageend           
    

select citydata.name cityname,zpxx.zwmc,zpxx.zpls,zpxx.fbdate,zpxx.stopdate,zpxxstate.name,zpxx.zpxxid,zpxx.xgdate
from citydata,zpxxstate,zpxx 
where zpxx.cname=@m_cname and zpxx.zpxxid >=@int_pageend and zpxx.zpxxid<=@int_pagebegin and zpxx.gzddbh=citydata.citybh and zpxx.state=zpxxstate.zpxxstatebh   ORDER BY zpxx.zpxxid desc


    close cro_fastread           
    deallocate cro_fastread 
     
    return
GO

其中的表都是自已建的,改掉就可以给别的表用了
@m_cname nvarchar(30),
@int_pagenow int=1,              
@int_pagesize int=7
传进来的三个参数
@m_cname 主键
@int_pagenow 当前页数
@int_pagesize 每页的条数


中间用了游标,不知道对性能有没有影响
大家如果有更好的分页存储过程写上来看一下啊
declare @SQLStr varchar(8000)
set @SQLStr='SELECT Top '+cast(@每页大小 as varchar)+' * FROM 表 WHERE 主键列 NOT IN (SELECT TOP '+cast(@每页大小*@第几页 as varchar)+' 主键列 from 表 )'
exec(@SQLStr)
select IDENTITY(int, 1,1) AS ID_Num,* into #temp from 表
select * from #temp where ID_Num between 10 and 20
其中的表都是自已建的,改掉就可以给别的表用了
@m_cname nvarchar(30),
@int_pagenow int=1,              
@int_pagesize int=7
1、可能不可行,有可能某表有多个主建
2、采用游标单条循环,如果记录比较大,效率非常低
最快   ???
通用   ?????
有没有又快又好的分页存储过程啊
Mark