SQL2000分页存储过程
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
set ANSI_NULLS ON2
set QUOTED_IDENTIFIER ON3
GO4

5
/***********************************************6
名称:Proc_GetPageList7
功能:分页存储过程8
创建人:kangaroo9
日期:2008/7/1710
***********************************************/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
AS25
SET NOCOUNT ON26
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
begin36
if not(@SortField is null)37
set @SqlSort = ' Order by ' + @SortField38
else39
set @SqlSort = ' Order by ' + @PK40
end41
else --降序42
begin43
if not(@SortField is null)44
set @SqlSort = ' Order by ' + @SortField + ' DESC' 45
else46
set @SqlSort = ' Order by ' + @PK + ' DESC '47
end48
--------生成查询语句--------49
if @Filter is null or @Filter='' --没有设置显示条件50
begin51
set @FromTemp = ' From ' + @Tables52
end53
else54
begin55
set @FromTemp = ' From ' + @Tables + ' where ' + @Filter56
end57
set @SqlCount= 'select @RecordCounts=Count(' + @PK + ') '+@FromTemp58
----取得查询结果总数量-----59
exec sp_executesql @SqlCount,N'@RecordCounts int out ',@RecordCounts out60

61
--取得分页总数62
if @RecordCounts<= @PageSize63
set @PageCount = 164
else65
set @PageCount = (@RecordCounts / @PageSize) + 166

67
if @PageIndex=168
begin --第一页用TOP方法来获取当前页记录69
set @SqlResult='select top '+str(@PageSize)+' '+@Fields+' '+@FromTemp+' '+@SqlSort70
end71

72
else73
begin --用临时表获取当前页计录74
set @PageMinBound=(@Pageindex-1)*@Pagesize75
set @PageMaxBound=@PageMinBound+@Pagesize76
create table #Pageindex (id int identity(1,1) not null,nid int)77
set rowcount @PageMaxBound78
set @SqlResult='insert into #Pageindex(nid) select '+@PK+' '+@FromTemp+' '+@SqlSort79
set @SqlResult=@SqlResult+' select '+@Fields+' from '+@Tables+' a,#Pageindex p80
where a.'+@PK+'=p.nid and p.id>'+str(@PageMinBound)+' and p.id<='+str(@PageMaxBound)81

82
end83
print @SqlResult84
exec sp_executesql @SqlResult85

86

87



浙公网安备 33010602011771号