求SQL2005高性能存储过程分页代码,该怎么处理

求SQL2005高性能存储过程分页代码
求sql2005高性能存储过程分页代码及调用代码 
前辈们 
小弟刚入行 请写注释 !
谢谢!

数据大概在6-8万条左右 峰值在 14万左右 谢谢啦

ASP.NET

------解决方案--------------------
才14W的数据有什么好怕的!

SQL code

CREATE PROCEDURE  dbo.f_page
(@pagesize int,
@pageindex int,
@docount bit,
@argcode varchar(100),
@argtable varchar(100),
@order varchar(100),
@where varchar(500),
@counts  int = 1 output
) AS 


BEGIN TRANSACTION

SET NOCOUNT ON 

IF(@docount=1)  
    BEGIN
        DECLARE @sqlStr Varchar(4000) 
        SET @sqlStr='SELECT COUNT('+@argcode+') FROM '+@argtable+' WHERE ' + @where 
        EXEC(@sqlStr)
    END
ELSE  
    BEGIN 
        CREATE TABLE #indextable(id bigint identity(1,1),nid bigint)
        DECLARE @PageLowerBound int
        DECLARE @PageUpperBound int
        DECLARE @sqlStr4 nvarchar(4000) 
        DECLARE @sqlStr1 Varchar(4000) 
        DECLARE @sqlStr2 Varchar(4000) 
        DECLARE @sqlStr3 Varchar(4000) 
DECLARE @a1 varchar(100)
DECLARE @a2 varchar(100)
         SET @PageLowerBound=(@pageindex-1)*@pagesize
        SET @PageUpperBound=@PageLowerBound+@pagesize
        SET ROWCOUNT @PageUpperBound
set @a1=@PageLowerBound
set @a2=@PageUpperBound
       set @sqlstr3='AND t.id>'+@a1+' AND t.id<='+@a2
        SET @sqlStr1='INSERT INTO #indextable(nid) SELECT '+@argcode+' FROM '+@argtable+'  WHERE ' + @where  + '  ORDER BY  ' + @order 
        EXEC(@sqlStr1)
        SET @sqlstr2=' SELECT * FROM '+@argtable+',#indextable t WHERE '+@argcode+' =t.nid  '+@sqlstr3+'  ORDER BY t.id'
        SET @sqlStr4='SELECT @counts=COUNT('+@argcode+') FROM '+@argtable+' WHERE ' + @where 
        exec sp_executesql @sqlStr4,N'@counts int out ',@counts out
        Exec (@sqlstr2)
    END
SET NOCOUNT OFF


COMMIT TRANSACTION

GO

------解决方案--------------------
SQL code
ALTER PROCEDURE [dbo].[Pg_Paging]
@Tables varchar(1000), --表名,多红表是请使用 tA a inner join tB b On a.AID = b.AID
@PK varchar(100),    --主键,可以带表头 a.AID
@Sort varchar(200) = '', --排序字段
@PageNumber int = 1,    --开始页码
@PageSize int = 10,        --页大小
@Fields varchar(1000) = '*',--读取字段
@Filter varchar(1000) = NULL,--Where条件
@Group varchar(1000) = NULL,  --分组
@isCount bit = 0     --1    --是否获得总记录数
AS
--
--select * from GL_NEWS order by GN_UPDATE_DATE DESC
--exec Pg_Paging @Tables = 'tb_NewsInfo', @PK = 'News_ID', @Sort = 'News_ID DESC', @PageNumber = 2, @PageSize = 15,@Fields = '*', @Group = '', @isCount = 0
DECLARE @strFilter varchar(2000)
declare @sql varchar(8000)
IF @Filter IS NOT NULL AND @Filter != ''
  BEGIN
   SET @strFilter = ' WHERE ' + @Filter + ' '
  END
ELSE
  BEGIN
   SET @strFilter = ''
  END

if @isCount = 1 --只获得记录条数
    begin
        set @sql = 'SELECT  Count(*) FROM ' + @Tables + @strFilter  
    end
else
begin
if @Sort = ''
  set @Sort = @PK + ' DESC '

IF @PageNumber < 1
  SET @PageNumber = 1

if @PageNumber = 1 --第一页提高性能
begin 
  set @sql = 'select top ' + str(@PageSize) +' '+@Fields+ '  from ' + @Tables + ' ' + @strFilter + ' ORDER BY  '+ @Sort
end 
else
  begin
  /**//**//**//*Execute dynamic query*/    
   DECLARE @START_ID varchar(50)
DECLARE @END_ID varchar(50)
SET @START_ID = convert(varchar(50),(@PageNumber - 1) * @PageSize + 1)
SET @END_ID = convert(varchar(50),@PageNumber * @PageSize)
    set @sql =  ' SELECT '+@Fields+ '
   FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS rownum, 
     '+@Fields+ '
      FROM '+@Tables+') AS D
   WHERE rownum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY '+@Sort
  END

END
--print @sql

EXEC(@sql)