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