1
--
TOP n 实现的通用分页存储过程
2 CREATE PROC sp_PageView
3 @tbname sysname, -- 要分页显示的表名
4 @FieldKey nvarchar ( 1000 ), -- 用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
5 @PageCurrent int = 1 , -- 要显示的页码
6 @PageSize int = 10 , -- 每页的大小(记录数)
7 @FieldShow nvarchar ( 1000 ) = '' , -- 以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
8 @FieldOrder nvarchar ( 1000 ) = '' , -- 以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
9 用于指定排序顺序
10 @Where nvarchar ( 1000 ) = '' , -- 查询条件
11 @PageCount int OUTPUT -- 总页数
12 AS
13 SET NOCOUNT ON
14 -- 检查对象是否有效
15 IF OBJECT_ID ( @tbname ) IS NULL
16 BEGIN
17 RAISERROR (N ' 对象"%s"不存在 ' , 1 , 16 , @tbname )
18 RETURN
19 END
20 IF OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsTable ' ) = 0
21 AND OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsView ' ) = 0
22 AND OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsTableFunction ' ) = 0
23 BEGIN
24 RAISERROR (N ' "%s"不是表、视图或者表值函数 ' , 1 , 16 , @tbname )
25 RETURN
26 END
27
28 -- 分页字段检查
29 IF ISNULL ( @FieldKey ,N '' ) = ''
30 BEGIN
31 RAISERROR (N ' 分页处理需要主键(或者惟一键) ' , 1 , 16 )
32 RETURN
33 END
34
35 -- 其他参数检查及规范
36 IF ISNULL ( @PageCurrent , 0 ) < 1 SET @PageCurrent = 1
37 IF ISNULL ( @PageSize , 0 ) < 1 SET @PageSize = 10
38 IF ISNULL ( @FieldShow ,N '' ) = N '' SET @FieldShow = N ' * '
39 IF ISNULL ( @FieldOrder ,N '' ) = N ''
40 SET @FieldOrder = N ''
41 ELSE
42 SET @FieldOrder = N ' ORDER BY ' + LTRIM ( @FieldOrder )
43 IF ISNULL ( @Where ,N '' ) = N ''
44 SET @Where = N ''
45 ELSE
46 SET @Where = N ' WHERE ( ' + @Where + N ' ) '
47
48 -- 如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
49 IF @PageCount IS NULL
50 BEGIN
51 DECLARE @sql nvarchar ( 4000 )
52 SET @sql = N ' SELECT @PageCount=COUNT(*) '
53 + N ' FROM ' + @tbname
54 + N ' ' + @Where
55 EXEC sp_executesql @sql ,N ' @PageCount int OUTPUT ' , @PageCount OUTPUT
56 SET @PageCount = ( @PageCount + @PageSize - 1 ) / @PageSize
57 END
58
59 -- 计算分页显示的TOPN值
60 DECLARE @TopN varchar ( 20 ), @TopN1 varchar ( 20 )
61 SELECT @TopN = @PageSize ,
62 @TopN1 = ( @PageCurrent - 1 ) * @PageSize
63
64 -- 第一页直接显示
65 IF @PageCurrent = 1
66 EXEC (N ' SELECT TOP ' + @TopN
67 + N ' ' + @FieldShow
68 + N ' FROM ' + @tbname
69 + N ' ' + @Where
70 + N ' ' + @FieldOrder )
71 ELSE
72 BEGIN
73 -- 处理别名
74 IF @FieldShow = N ' * '
75 SET @FieldShow = N ' a.* '
76
77 -- 生成主键(惟一键)处理条件
78 DECLARE @Where1 nvarchar ( 4000 ), @Where2 nvarchar ( 4000 ),
79 @s nvarchar ( 1000 ), @Field sysname
80 SELECT @Where1 = N '' , @Where2 = N '' , @s = @FieldKey
81 WHILE CHARINDEX (N ' , ' , @s ) > 0
82 SELECT @Field =LEFT ( @s , CHARINDEX (N ' , ' , @s ) - 1 ),
83 @s = STUFF ( @s , 1 , CHARINDEX (N ' , ' , @s ),N '' ),
84 @Where1 = @Where1 + N ' AND a. ' + @Field + N ' =b. ' + @Field ,
85 @Where2 = @Where2 + N ' AND b. ' + @Field + N ' IS NULL ' ,
86 @Where = REPLACE ( @Where , @Field ,N ' a. ' + @Field ),
87 @FieldOrder = REPLACE ( @FieldOrder , @Field ,N ' a. ' + @Field ),
88 @FieldShow = REPLACE ( @FieldShow , @Field ,N ' a. ' + @Field )
89 SELECT @Where = REPLACE ( @Where , @s ,N ' a. ' + @s ),
90 @FieldOrder = REPLACE ( @FieldOrder , @s ,N ' a. ' + @s ),
91 @FieldShow = REPLACE ( @FieldShow , @s ,N ' a. ' + @s ),
92 @Where1 = STUFF ( @Where1 + N ' AND a. ' + @s + N ' =b. ' + @s , 1 , 5 ,N '' ),
93 @Where2 = CASE
94 WHEN @Where = '' THEN N ' WHERE ( '
95 ELSE @Where + N ' AND ( '
96 END + N ' b. ' + @s + N ' IS NULL ' + @Where2 + N ' ) '
97
98 -- 执行查询
99 EXEC (N ' SELECT TOP ' + @TopN
100 + N ' ' + @FieldShow
101 + N ' FROM ' + @tbname
102 + N ' a LEFT JOIN(SELECT TOP ' + @TopN1
103 + N ' ' + @FieldKey
104 + N ' FROM ' + @tbname
105 + N ' a ' + @Where
106 + N ' ' + @FieldOrder
107 + N ' )b ON ' + @Where1
108 + N ' ' + @Where2
109 + N ' ' + @FieldOrder )
110 END
2 CREATE PROC sp_PageView
3 @tbname sysname, -- 要分页显示的表名
4 @FieldKey nvarchar ( 1000 ), -- 用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
5 @PageCurrent int = 1 , -- 要显示的页码
6 @PageSize int = 10 , -- 每页的大小(记录数)
7 @FieldShow nvarchar ( 1000 ) = '' , -- 以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
8 @FieldOrder nvarchar ( 1000 ) = '' , -- 以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
9 用于指定排序顺序
10 @Where nvarchar ( 1000 ) = '' , -- 查询条件
11 @PageCount int OUTPUT -- 总页数
12 AS
13 SET NOCOUNT ON
14 -- 检查对象是否有效
15 IF OBJECT_ID ( @tbname ) IS NULL
16 BEGIN
17 RAISERROR (N ' 对象"%s"不存在 ' , 1 , 16 , @tbname )
18 RETURN
19 END
20 IF OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsTable ' ) = 0
21 AND OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsView ' ) = 0
22 AND OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsTableFunction ' ) = 0
23 BEGIN
24 RAISERROR (N ' "%s"不是表、视图或者表值函数 ' , 1 , 16 , @tbname )
25 RETURN
26 END
27
28 -- 分页字段检查
29 IF ISNULL ( @FieldKey ,N '' ) = ''
30 BEGIN
31 RAISERROR (N ' 分页处理需要主键(或者惟一键) ' , 1 , 16 )
32 RETURN
33 END
34
35 -- 其他参数检查及规范
36 IF ISNULL ( @PageCurrent , 0 ) < 1 SET @PageCurrent = 1
37 IF ISNULL ( @PageSize , 0 ) < 1 SET @PageSize = 10
38 IF ISNULL ( @FieldShow ,N '' ) = N '' SET @FieldShow = N ' * '
39 IF ISNULL ( @FieldOrder ,N '' ) = N ''
40 SET @FieldOrder = N ''
41 ELSE
42 SET @FieldOrder = N ' ORDER BY ' + LTRIM ( @FieldOrder )
43 IF ISNULL ( @Where ,N '' ) = N ''
44 SET @Where = N ''
45 ELSE
46 SET @Where = N ' WHERE ( ' + @Where + N ' ) '
47
48 -- 如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
49 IF @PageCount IS NULL
50 BEGIN
51 DECLARE @sql nvarchar ( 4000 )
52 SET @sql = N ' SELECT @PageCount=COUNT(*) '
53 + N ' FROM ' + @tbname
54 + N ' ' + @Where
55 EXEC sp_executesql @sql ,N ' @PageCount int OUTPUT ' , @PageCount OUTPUT
56 SET @PageCount = ( @PageCount + @PageSize - 1 ) / @PageSize
57 END
58
59 -- 计算分页显示的TOPN值
60 DECLARE @TopN varchar ( 20 ), @TopN1 varchar ( 20 )
61 SELECT @TopN = @PageSize ,
62 @TopN1 = ( @PageCurrent - 1 ) * @PageSize
63
64 -- 第一页直接显示
65 IF @PageCurrent = 1
66 EXEC (N ' SELECT TOP ' + @TopN
67 + N ' ' + @FieldShow
68 + N ' FROM ' + @tbname
69 + N ' ' + @Where
70 + N ' ' + @FieldOrder )
71 ELSE
72 BEGIN
73 -- 处理别名
74 IF @FieldShow = N ' * '
75 SET @FieldShow = N ' a.* '
76
77 -- 生成主键(惟一键)处理条件
78 DECLARE @Where1 nvarchar ( 4000 ), @Where2 nvarchar ( 4000 ),
79 @s nvarchar ( 1000 ), @Field sysname
80 SELECT @Where1 = N '' , @Where2 = N '' , @s = @FieldKey
81 WHILE CHARINDEX (N ' , ' , @s ) > 0
82 SELECT @Field =LEFT ( @s , CHARINDEX (N ' , ' , @s ) - 1 ),
83 @s = STUFF ( @s , 1 , CHARINDEX (N ' , ' , @s ),N '' ),
84 @Where1 = @Where1 + N ' AND a. ' + @Field + N ' =b. ' + @Field ,
85 @Where2 = @Where2 + N ' AND b. ' + @Field + N ' IS NULL ' ,
86 @Where = REPLACE ( @Where , @Field ,N ' a. ' + @Field ),
87 @FieldOrder = REPLACE ( @FieldOrder , @Field ,N ' a. ' + @Field ),
88 @FieldShow = REPLACE ( @FieldShow , @Field ,N ' a. ' + @Field )
89 SELECT @Where = REPLACE ( @Where , @s ,N ' a. ' + @s ),
90 @FieldOrder = REPLACE ( @FieldOrder , @s ,N ' a. ' + @s ),
91 @FieldShow = REPLACE ( @FieldShow , @s ,N ' a. ' + @s ),
92 @Where1 = STUFF ( @Where1 + N ' AND a. ' + @s + N ' =b. ' + @s , 1 , 5 ,N '' ),
93 @Where2 = CASE
94 WHEN @Where = '' THEN N ' WHERE ( '
95 ELSE @Where + N ' AND ( '
96 END + N ' b. ' + @s + N ' IS NULL ' + @Where2 + N ' ) '
97
98 -- 执行查询
99 EXEC (N ' SELECT TOP ' + @TopN
100 + N ' ' + @FieldShow
101 + N ' FROM ' + @tbname
102 + N ' a LEFT JOIN(SELECT TOP ' + @TopN1
103 + N ' ' + @FieldKey
104 + N ' FROM ' + @tbname
105 + N ' a ' + @Where
106 + N ' ' + @FieldOrder
107 + N ' )b ON ' + @Where1
108 + N ' ' + @Where2
109 + N ' ' + @FieldOrder )
110 END
1
--
字符串缓存实现的通用分页存储过程(转)
2 CREATE PROC sp_PageView
3 @tbname sysname, -- 要分页显示的表名
4 @FieldKey sysname, -- 用于定位记录的主键(惟一键)字段,只能是单个字段
5 @PageCurrent int = 1 , -- 要显示的页码
6 @PageSize int = 10 , -- 每页的大小(记录数)
7 @FieldShow nvarchar ( 1000 ) = '' , -- 以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
8 @FieldOrder nvarchar ( 1000 ) = '' , -- 以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
9 用于指定排序顺序
10 @Where nvarchar ( 1000 ) = '' , -- 查询条件
11 @PageCount int OUTPUT -- 总页数
12 AS
13 DECLARE @sql nvarchar ( 4000 )
14 SET NOCOUNT ON
15 -- 检查对象是否有效
16 IF OBJECT_ID ( @tbname ) IS NULL
17 BEGIN
18 RAISERROR (N ' 对象"%s"不存在 ' , 1 , 16 , @tbname )
19 RETURN
20 END
21 IF OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsTable ' ) = 0
22 AND OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsView ' ) = 0
23 AND OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsTableFunction ' ) = 0
24 BEGIN
25 RAISERROR (N ' "%s"不是表、视图或者表值函数 ' , 1 , 16 , @tbname )
26 RETURN
27 END
28
29 -- 分页字段检查
30 IF ISNULL ( @FieldKey ,N '' ) = ''
31 BEGIN
32 RAISERROR (N ' 分页处理需要主键(或者惟一键) ' , 1 , 16 )
33 RETURN
34 END
35
36 -- 其他参数检查及规范
37 IF ISNULL ( @PageCurrent , 0 ) < 1 SET @PageCurrent = 1
38 IF ISNULL ( @PageSize , 0 ) < 1 SET @PageSize = 10
39 IF ISNULL ( @FieldShow ,N '' ) = N '' SET @FieldShow = N ' * '
40 IF ISNULL ( @FieldOrder ,N '' ) = N ''
41 SET @FieldOrder = N ''
42 ELSE
43 SET @FieldOrder = N ' ORDER BY ' + LTRIM ( @FieldOrder )
44 IF ISNULL ( @Where ,N '' ) = N ''
45 SET @Where = N ''
46 ELSE
47 SET @Where = N ' WHERE ( ' + @Where + N ' ) '
48
49 -- 如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
50 IF @PageCount IS NULL
51 BEGIN
52 SET @sql = N ' SELECT @PageCount=COUNT(*) '
53 + N ' FROM ' + @tbname
54 + N ' ' + @Where
55 EXEC sp_executesql @sql ,N ' @PageCount int OUTPUT ' , @PageCount OUTPUT
56 SET @PageCount = ( @PageCount + @PageSize - 1 ) / @PageSize
57 END
58
59 -- 计算分页显示的TOPN值
60 DECLARE @TopN varchar ( 20 ), @TopN1 varchar ( 20 )
61 SELECT @TopN = @PageSize ,
62 @TopN1 = @PageCurrent * @PageSize
63
64 -- 第一页直接显示
65 IF @PageCurrent = 1
66 EXEC (N ' SELECT TOP ' + @TopN
67 + N ' ' + @FieldShow
68 + N ' FROM ' + @tbname
69 + N ' ' + @Where
70 + N ' ' + @FieldOrder )
71 ELSE
72 BEGIN
73 SELECT @PageCurrent = @TopN1 ,
74 @sql = N ' SELECT @n=@n-1,@s=CASE WHEN @n< ' + @TopN
75 + N ' THEN @s+N '' , '' +QUOTENAME(RTRIM(CAST( ' + @FieldKey
76 + N ' as varchar(8000))),N '''''''' ) ELSE N '''' END FROM ' + @tbname
77 + N ' ' + @Where
78 + N ' ' + @FieldOrder
79 SET ROWCOUNT @PageCurrent
80 EXEC sp_executesql @sql ,
81 N ' @n int,@s nvarchar(4000) OUTPUT ' ,
82 @PageCurrent , @sql OUTPUT
83 SET ROWCOUNT 0
84 IF @sql = N ''
85 EXEC (N ' SELECT TOP 0 '
86 + N ' ' + @FieldShow
87 + N ' FROM ' + @tbname )
88 ELSE
89 BEGIN
90 SET @sql = STUFF ( @sql , 1 , 1 ,N '' )
91 -- 执行查询
92 EXEC (N ' SELECT TOP ' + @TopN
93 + N ' ' + @FieldShow
94 + N ' FROM ' + @tbname
95 + N ' WHERE ' + @FieldKey
96 + N ' IN( ' + @sql
97 + N ' ) ' + @FieldOrder )
98 END
99 END
2 CREATE PROC sp_PageView
3 @tbname sysname, -- 要分页显示的表名
4 @FieldKey sysname, -- 用于定位记录的主键(惟一键)字段,只能是单个字段
5 @PageCurrent int = 1 , -- 要显示的页码
6 @PageSize int = 10 , -- 每页的大小(记录数)
7 @FieldShow nvarchar ( 1000 ) = '' , -- 以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
8 @FieldOrder nvarchar ( 1000 ) = '' , -- 以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
9 用于指定排序顺序
10 @Where nvarchar ( 1000 ) = '' , -- 查询条件
11 @PageCount int OUTPUT -- 总页数
12 AS
13 DECLARE @sql nvarchar ( 4000 )
14 SET NOCOUNT ON
15 -- 检查对象是否有效
16 IF OBJECT_ID ( @tbname ) IS NULL
17 BEGIN
18 RAISERROR (N ' 对象"%s"不存在 ' , 1 , 16 , @tbname )
19 RETURN
20 END
21 IF OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsTable ' ) = 0
22 AND OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsView ' ) = 0
23 AND OBJECTPROPERTY ( OBJECT_ID ( @tbname ),N ' IsTableFunction ' ) = 0
24 BEGIN
25 RAISERROR (N ' "%s"不是表、视图或者表值函数 ' , 1 , 16 , @tbname )
26 RETURN
27 END
28
29 -- 分页字段检查
30 IF ISNULL ( @FieldKey ,N '' ) = ''
31 BEGIN
32 RAISERROR (N ' 分页处理需要主键(或者惟一键) ' , 1 , 16 )
33 RETURN
34 END
35
36 -- 其他参数检查及规范
37 IF ISNULL ( @PageCurrent , 0 ) < 1 SET @PageCurrent = 1
38 IF ISNULL ( @PageSize , 0 ) < 1 SET @PageSize = 10
39 IF ISNULL ( @FieldShow ,N '' ) = N '' SET @FieldShow = N ' * '
40 IF ISNULL ( @FieldOrder ,N '' ) = N ''
41 SET @FieldOrder = N ''
42 ELSE
43 SET @FieldOrder = N ' ORDER BY ' + LTRIM ( @FieldOrder )
44 IF ISNULL ( @Where ,N '' ) = N ''
45 SET @Where = N ''
46 ELSE
47 SET @Where = N ' WHERE ( ' + @Where + N ' ) '
48
49 -- 如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
50 IF @PageCount IS NULL
51 BEGIN
52 SET @sql = N ' SELECT @PageCount=COUNT(*) '
53 + N ' FROM ' + @tbname
54 + N ' ' + @Where
55 EXEC sp_executesql @sql ,N ' @PageCount int OUTPUT ' , @PageCount OUTPUT
56 SET @PageCount = ( @PageCount + @PageSize - 1 ) / @PageSize
57 END
58
59 -- 计算分页显示的TOPN值
60 DECLARE @TopN varchar ( 20 ), @TopN1 varchar ( 20 )
61 SELECT @TopN = @PageSize ,
62 @TopN1 = @PageCurrent * @PageSize
63
64 -- 第一页直接显示
65 IF @PageCurrent = 1
66 EXEC (N ' SELECT TOP ' + @TopN
67 + N ' ' + @FieldShow
68 + N ' FROM ' + @tbname
69 + N ' ' + @Where
70 + N ' ' + @FieldOrder )
71 ELSE
72 BEGIN
73 SELECT @PageCurrent = @TopN1 ,
74 @sql = N ' SELECT @n=@n-1,@s=CASE WHEN @n< ' + @TopN
75 + N ' THEN @s+N '' , '' +QUOTENAME(RTRIM(CAST( ' + @FieldKey
76 + N ' as varchar(8000))),N '''''''' ) ELSE N '''' END FROM ' + @tbname
77 + N ' ' + @Where
78 + N ' ' + @FieldOrder
79 SET ROWCOUNT @PageCurrent
80 EXEC sp_executesql @sql ,
81 N ' @n int,@s nvarchar(4000) OUTPUT ' ,
82 @PageCurrent , @sql OUTPUT
83 SET ROWCOUNT 0
84 IF @sql = N ''
85 EXEC (N ' SELECT TOP 0 '
86 + N ' ' + @FieldShow
87 + N ' FROM ' + @tbname )
88 ELSE
89 BEGIN
90 SET @sql = STUFF ( @sql , 1 , 1 ,N '' )
91 -- 执行查询
92 EXEC (N ' SELECT TOP ' + @TopN
93 + N ' ' + @FieldShow
94 + N ' FROM ' + @tbname
95 + N ' WHERE ' + @FieldKey
96 + N ' IN( ' + @sql
97 + N ' ) ' + @FieldOrder )
98 END
99 END
1
--
使用系统存储过程实现的通用分页存储过程
2 CREATE PROC sp_PageView
3 @sql ntext , -- 要执行的sql语句
4 @PageCurrent int = 1 , -- 要显示的页码
5 @PageSize int = 10 , -- 每页的大小
6 @PageCount int OUTPUT -- 总页数
7 AS
8 SET NOCOUNT ON
9 DECLARE @p1 int
10 -- 初始化分页游标
11 EXEC sp_cursoropen
12 @cursor = @p1 OUTPUT,
13 @stmt = @sql ,
14 @scrollopt = 1 ,
15 @ccopt = 1 ,
16 @rowcount = @PageCount OUTPUT
17
18 -- 计算总页数
19 IF ISNULL ( @PageSize , 0 ) < 1
20 SET @PageSize = 10
21 SET @PageCount = ( @PageCount + @PageSize - 1 ) / @PageSize
22 IF ISNULL ( @PageCurrent , 0 ) < 1 OR ISNULL ( @PageCurrent , 0 ) > @PageCount
23 SET @PageCurrent = 1
24 ELSE
25 SET @PageCurrent = ( @PageCurrent - 1 ) * @PageSize + 1
26
27 -- 显示指定页的数据
28 EXEC sp_cursorfetch @p1 , 16 , @PageCurrent , @PageSize
29
30 -- 关闭分页游标
31 EXEC sp_cursorclose @p1
2 CREATE PROC sp_PageView
3 @sql ntext , -- 要执行的sql语句
4 @PageCurrent int = 1 , -- 要显示的页码
5 @PageSize int = 10 , -- 每页的大小
6 @PageCount int OUTPUT -- 总页数
7 AS
8 SET NOCOUNT ON
9 DECLARE @p1 int
10 -- 初始化分页游标
11 EXEC sp_cursoropen
12 @cursor = @p1 OUTPUT,
13 @stmt = @sql ,
14 @scrollopt = 1 ,
15 @ccopt = 1 ,
16 @rowcount = @PageCount OUTPUT
17
18 -- 计算总页数
19 IF ISNULL ( @PageSize , 0 ) < 1
20 SET @PageSize = 10
21 SET @PageCount = ( @PageCount + @PageSize - 1 ) / @PageSize
22 IF ISNULL ( @PageCurrent , 0 ) < 1 OR ISNULL ( @PageCurrent , 0 ) > @PageCount
23 SET @PageCurrent = 1
24 ELSE
25 SET @PageCurrent = ( @PageCurrent - 1 ) * @PageSize + 1
26
27 -- 显示指定页的数据
28 EXEC sp_cursorfetch @p1 , 16 , @PageCurrent , @PageSize
29
30 -- 关闭分页游标
31 EXEC sp_cursorclose @p1
http://topic.csdn.net/u/20080325/14/d25ada1e-979e-49ef-95b6-8ebf114d2fca.html