2分分页处理存储过程通用存储过程
2006-06-30 18:13 蓝之风 阅读(489) 评论(0) 编辑 收藏 举报
1
--/*----- 对数据进行了2分处理使查询前半部分数据与查询后半部分数据性能相同 -------*/
2
--/*-----存储过程 分页处理 2005-04-21修改 添加Distinct查询功能-------*/
3
--/*-----存储过程 分页处理 2005-05-18修改 多字段排序规则问题-------*/
4
--/*-----存储过程 分页处理 2005-06-15修改 多字段排序修改-------*/
5
ALTER PROCEDURE dbo.proc_ListPage
6
(
7
@tblName nvarchar(200), ----要显示的表或多个表的连接
8
@fldName nvarchar(500) = '*', ----要显示的字段列表
9
@pageSize int = 1, ----每页显示的记录个数
10
@page int = 10, ----要显示那一页的记录
11
@pageCount int = 1 output, ----查询结果分页后的总页数
12
@Counts int = 1 output, ----查询到的记录数
13
@fldSort nvarchar(200) = null, ----排序字段列表或条件
14
@Sort bit = 0, ----排序方法,0为升序,1为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')
15
@strCondition nvarchar(1000) = null, ----查询条件,不需where
16
@ID nvarchar(150), ----主表的主键
17
@Dist bit = 0 ----是否添加查询字段的 DISTINCT 默认0不添加/1添加
18
)
19
AS
20
SET NOCOUNT ON
21
Declare @sqlTmp nvarchar(1000) ----存放动态生成的SQL语句
22
Declare @strTmp nvarchar(1000) ----存放取得查询结果总数的查询语句
23
Declare @strID nvarchar(1000) ----存放取得查询开头或结尾ID的查询语句
24
25
Declare @strSortType nvarchar(10) ----数据排序规则A
26
Declare @strFSortType nvarchar(10) ----数据排序规则B
27
28
Declare @SqlSelect nvarchar(50) ----对含有DISTINCT的查询进行SQL构造
29
Declare @SqlCounts nvarchar(50) ----对含有DISTINCT的总数查询进行SQL构造
30
31
32
if @Dist = 0
33
begin
34
set @SqlSelect = 'select '
35
set @SqlCounts = 'Count(*)'
36
end
37
else
38
begin
39
set @SqlSelect = 'select distinct '
40
set @SqlCounts = 'Count(DISTINCT '+@ID+')'
41
end
42
43
44
if @Sort=0
45
begin
46
set @strFSortType=' ASC '
47
set @strSortType=' DESC '
48
end
49
else
50
begin
51
set @strFSortType=' DESC '
52
set @strSortType=' ASC '
53
end
54
55
56
57
--------生成查询语句--------
58
--此处@strTmp为取得查询结果数量的语句
59
if @strCondition is null or @strCondition='' --没有设置显示条件
60
begin
61
set @sqlTmp = @fldName + ' From ' + @tblName
62
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName
63
set @strID = ' From ' + @tblName
64
end
65
else
66
begin
67
set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition
68
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName + ' where (1>0) ' + @strCondition
69
set @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition
70
end
71
72
----取得查询结果总数量-----
73
exec sp_executesql @strTmp,N'@Counts int out ',@Counts out
74
declare @tmpCounts int
75
if @Counts = 0
76
set @tmpCounts = 1
77
else
78
set @tmpCounts = @Counts
79
80
--取得分页总数
81
set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize
82
83
/**//**//**//**当前页大于总页数 取最后一页**/
84
if @page>@pageCount
85
set @page=@pageCount
86
87
--/*-----数据分页2分处理-------*/
88
declare @pageIndex int --总数/页大小
89
declare @lastcount int --总数%页大小
90
91
set @pageIndex = @tmpCounts/@pageSize
92
set @lastcount = @tmpCounts%@pageSize
93
if @lastcount > 0
94
set @pageIndex = @pageIndex + 1
95
else
96
set @lastcount = @pagesize
97
98
--//***显示分页
99
if @strCondition is null or @strCondition='' --没有设置显示条件
100
begin
101
if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分数据处理
102
begin
103
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
104
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
105
+' order by '+ @fldSort +' '+ @strFSortType+')'
106
+' order by '+ @fldSort +' '+ @strFSortType
107
end
108
else
109
begin
110
set @page = @pageIndex-@page+1 --后半部分数据处理
111
if @page <= 1 --最后一页数据显示
112
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
113
+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
114
else
115
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
116
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
117
+' order by '+ @fldSort +' '+ @strSortType+')'
118
119
+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
120
end
121
end
122
123
else --有查询条件
124
begin
125
if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分数据处理
126
begin
127
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName +' from '+@tblName
128
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
129
+' Where (1>0) ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType+')'
130
+' ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType
131
end
132
else
133
begin
134
set @page = @pageIndex-@page+1 --后半部分数据处理
135
if @page <= 1 --最后一页数据显示
136
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
137
+' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
138
else
139
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
140
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
141
+' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+')'
142
+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
143
end
144
end
145
146
------返回查询结果-----
147
exec sp_executesql @strTmp
148
--print @strTmp
149
SET NOCOUNT OFF

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

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

作者:蓝之风
出处:http://www.cnblogs.com/vaiyanzi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架