1
set ANSI_NULLS ON
2
set QUOTED_IDENTIFIER ON
3
GO
4
5
/***********************************************
6
名称:Proc_GetPageList
7
功能:分页存储过程
8
创建人:kangaroo
9
日期:2008/7/17
10
***********************************************/
11
ALTER PROCEDURE [dbo].[Proc_GetPageList]
12
(
13
@Tables varchar(1000), --表名
14
@PK varchar(100), --主键
15
@Fields varchar(1000) = \'*\', --查询的字段
16
@SortField varchar(200) = NULL, --排序的字段
17
@SortType varchar(10)= \'ASC\', --排序方式
18
@PageIndex int = 1, --页码索引
19
@PageSize int = 10, --页码大小
20
@Filter varchar(1000) = NULL, --过滤条件
21
@PageCount int = 1 output, ----查询结果分页后的总页数
22
@RecordCounts int = 1 output ----查询到的记录数
23
)
24
AS
25
SET NOCOUNT ON
26
declare @FieldName nvarchar(50)
27
declare @SqlSort nvarchar(250)
28
declare @SqlCount nvarchar(2000)
29
declare @FromTemp nvarchar(1000)
30
declare @SqlResult nvarchar(4000)
31
declare @PageMinBound int
32
declare @PageMaxBound int
33
--------首先生成排序方法---------
34
if @SortType=\'ASC\' --升序
35
begin
36
if not(@SortField is null)
37
set @SqlSort = \' Order by \' + @SortField
38
else
39
set @SqlSort = \' Order by \' + @PK
40
end
41
else --降序
42
begin
43
if not(@SortField is null)
44
set @SqlSort = \' Order by \' + @SortField + \' DESC\'
45
else
46
set @SqlSort = \' Order by \' + @PK + \' DESC \'
47
end
48
--------生成查询语句--------
49
if @Filter is null or @Filter=\'\' --没有设置显示条件
50
begin
51
set @FromTemp = \' From \' + @Tables
52
end
53
else
54
begin
55
set @FromTemp = \' From \' + @Tables + \' where \' + @Filter
56
end
57
set @SqlCount= \'select @RecordCounts=Count(\' + @PK + \') \'+@FromTemp
58
----取得查询结果总数量-----
59
exec sp_executesql @SqlCount,N\'@RecordCounts int out \',@RecordCounts out
60
61
--取得分页总数
62
if @RecordCounts<= @PageSize
63
set @PageCount = 1
64
else
65
set @PageCount = (@RecordCounts / @PageSize) + 1
66
67
if @PageIndex=1
68
begin --第一页用TOP方法来获取当前页记录
69
set @SqlResult=\'select top \'+str(@PageSize)+\' \'+@Fields+\' \'+@FromTemp+\' \'+@SqlSort
70
end
71
72
else
73
begin --用临时表获取当前页计录
74
set @PageMinBound=(@Pageindex-1)*@Pagesize
75
set @PageMaxBound=@PageMinBound+@Pagesize
76
create table #Pageindex (id int identity(1,1) not null,nid int)
77
set rowcount @PageMaxBound
78
set @SqlResult=\'insert into #Pageindex(nid) select \'+@PK+\' \'+@FromTemp+\' \'+@SqlSort
79
set @SqlResult=@SqlResult+\' select \'+@Fields+\' from \'+@Tables+\' a,#Pageindex p
80
where a.\'+@PK+\'=p.nid and p.id>\'+str(@PageMinBound)+\' and p.id<=\'+str(@PageMaxBound)
81
82
end
83
print @SqlResult
84
exec sp_executesql @SqlResult
85
86
87
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87