create procedure SP_GetRecordFromPage(
@sqlall varchar(7000),
@idfield varchar(128),
@ipage int,
@ipagecount int
)
AS
begin
declare @sql varchar(8000)
declare @fromwhere varchar(8000)
declare @selectfield varchar(8000)
declare @orderby varchar(8000)
declare @istartandpagecount varchar(32)
declare @idfield2 varchar(128) select @selectfield = substring(@sqlall, charindex("select", @sqlall) + 6, charindex("from", @sqlall)-7)
select @fromwhere = substring(@sqlall, charindex("from", @sqlall), char_length(@sqlall))
select @orderby = ""
if charindex("order", @fromwhere) <> 0
select @orderby = substring(@fromwhere, charindex("order", @fromwhere),
char_length(@fromwhere)) if charindex("order", @fromwhere) <> 0
select @fromwhere = substring(@fromwhere, 1, charindex("order", @fromwhere)-1)
select @istartandpagecount = convert(varchar(32), @ipage*@ipagecount)
select @idfield2 = substring(@idfield,charindex(".",@idfield)+1,128)
select @sql = "" + "select top " + @istartandpagecount + " sybid=identity(15), " + @idfield + "+0 " + @idfield2 +  "0,"+ @selectfield +" into #temp " + @fromwhere + " " + @orderby  + " " + " 
declare @icurcount int
declare @iresultcount int " + "
select @icurcount = count(*) from #temp
select @iresultcount = @icurcount - " + convert(varchar(32), (@ipage-1)*@ipagecount ) + "
if @iresultcount > 0
begin
set rowcount @iresultcount
select " + @idfield2 + " into #temp2 from #temp order by sybid desc
set rowcount 0
        select * from #temp where " + @idfield2 + "0 in (select " + @idfield2 + " from #temp2 group by " + @idfield2 + ") 
end 
drop table #temp "  
--select (@sql)
exec (@sql)
exec("select count(*) as TotalRecords "+@fromwhere)
end如上是sybase下的分页存储过程,想转成sql2000 的,主要是转一下序号列,各位高手帮忙转一下

解决方案 »

  1.   

    --1. char_length --> len
    --2. " --> '
    试试
      

  2.   

    set rowcount 分页效率还可以顶顶
      

  3.   

    --1. char_length --> len 
    --2. " --> ' 除了这些,还是有其它要改的哦
      

  4.   

    create   proc fenye @yeshu int,@tiaoshu int 
     
     as
    begin
    declare @i int,@k int
    set @i=(@yeshu-1)*@tiaoshu
    set @k=@yeshu*@tiaoshu
     
     exec('
    select * from dbo.BASCOMMAIN 
    where comid not in 
    (select top '+@i+ ' comid from dbo.BASCOMMAIN order by comid) 
    and comid in (select top  '+@k+'  comid from dbo.BASCOMMAIN order by comid)')end