sql存储过程实现分页

SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO --名称:分页存储过程 --使用示例
EXEC sp_PageIndex '*',' FROM StuSources ',2,10 --注意 --目前还没有对输入的参数进行严格的验证 --默认为输入都是合法有效的
ALTER PROC sp_PageIndex @sqlSelectvarchar(800) --SELECT 后面 FROM 前面 的 字段 不用包含
SELECT ,@sqlFromvarchar(800) --FROM 后面 的 字段 包含FROM ,@countPerPageint-- 每页数据行数
,@toPageint--要转到的页码 AS BEGIN -- 根据每页数据行数 和 要转到的页码 得到 数据起止点
Declare@startint Declare@endint set@end=@countPerPage*@toPage set@start=@countPerPage* (@toPage-1) +1 -- 临时表名称 可随机命名
Declare@tmpTablevarchar(10) SET@tmpTable='#tmp' Declare@sqlStrvarchar(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

  

posted @ 2012-04-06 17:26  Star★  阅读(182)  评论(0)    收藏  举报