sql2000下 分页存储过程

 

SET  QUOTED_IDENTIFIER  OFF  
GO
SET  ANSI_NULLS  ON  
GO
-- 名称:分页存储过程
--
使用示例 EXEC sp_PageIndex '*',' FROM StuSources ',2,10
--
注意 
--
目前还没有对输入的参数进行严格的验证
--
默认为输入都是合法有效的

ALTER    PROC  sp_PageIndex
 
@sqlSelect   varchar ( 800 -- SELECT 后面 FROM 前面 的 字段 不用包含SELECT
, @sqlFrom   varchar ( 800 -- FROM 后面 的 字段 包含FROM
, @countPerPage   int   --  每页数据行数
, @toPage   int   -- 要转到的页码

AS

BEGIN


--  根据每页数据行数 和 要转到的页码 得到 数据起止点
Declare   @start   int
Declare   @end   int

set   @end   =   @countPerPage   *   @toPage
set   @start   =   @countPerPage   *  ( @toPage   -   1 +   1


--  临时表名称 可随机命名
Declare   @tmpTable   varchar ( 10 )
SET   @tmpTable   = ' #tmp '

Declare   @sqlStr   varchar ( 800 )
--  创建数据源到临时表
SELECT   @sqlStr   =   ' SELECT Identity(int,1,1) AS RowIndex, '
SELECT   @sqlStr   =   @sqlStr   +   rtrim ( @sqlSelect +   '  INTO   ' +   @tmpTable  
SELECT   @sqlStr   =   @sqlStr   +   rtrim ( @sqlFrom
--  查询临时表 得到所需要的数据
SELECT   @sqlStr   =   @sqlStr   +   '   ' + ' SELECT  ' +   rtrim ( @sqlSelect + '  FROM  '   +   @tmpTable  
SELECT   @sqlStr   =   @sqlStr   +   '  WHERE  RowIndex BETWEEN  '   +   Convert ( char , @start +  "  AND  "  +   Convert ( char , @end )
--  删除临时表
SELECT   @sqlStr   =   @sqlStr   +   '   ' + ' DROP TABLE  ' + @tmpTable
EXEC  ( @sqlStr )


END


GO
SET  QUOTED_IDENTIFIER  OFF  
GO
SET  ANSI_NULLS  ON  
GO

 

你可能感兴趣的:(sql2000)