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
151

被折叠的 条评论
为什么被折叠?



