- UID
- 1415
- 主题
新手上路
- 金钱
-
- 威望
-
- 贡献
-
- 日志
- 好友
- 帖子
- 主题
- 听众
- 收听
- 性别
- 保密
|
2005) / W& b. ^7 Y, a' }9 h5 `2 Y
CREATE PROCEDURE [dbo].[GetUsers] --得到用户列表,注意这里的参数 . l4 J2 N/ Q g2 I; ]# ]' e
@RowIndex int,
; P, e% z4 k3 j; i2 x. K1 ? @RecordCount int . q" ^8 T( L& h9 ~
AS
, j' x1 G' [0 T5 o BEGIN
- g# R6 b3 T- F1 N SET NOCOUNT ON; ) G3 l) P1 c( m3 S+ f2 e2 v
With VUsers as ( ' ]" ?5 @: F1 l) D5 @$ d
select *,row_number() over (order at UserID desc) for RowNum
) h6 c! c% l1 z1 V/ q from MyUsers
5 C) t2 g8 D8 W- b! l# V# w ) 1 Z) S! ?/ O9 c/ Y& b+ C# m
select * from VUsers 6 ^* d6 w1 W8 }/ j
where RowNum > @RowIndex and RowNum <= (@RowIndex+@RecordCount) 3 Z7 R5 O+ w6 v8 D
END
; J! y5 f; b1 ~& G7 r7 H; H3 t. b 2. 分页方案一:(利用Not In和SELECT TOP分页)
0 X2 r3 ?& b" n' j 语句形式: % F [. U3 u6 V+ Y% Y
SELECT TOP 10 *
) O9 f! Z: G, {- S: ^* Z8 O FROM TestTable ) t' s# D, Z! m4 E- i0 D2 g
WHERE (ID NOT IN & k& C; P$ d; T- \$ J/ P
(SELECT TOP 20 id
% |- F/ ~; m% t5 F. v, J6 o9 m) s FROM TestTable 5 i/ W/ ~$ ]3 q( p9 E6 W& {; ]
ORDER BY id))
$ T8 b2 ~* F6 e8 r+ z) _& R ORDER BY ID
d; @. x6 [, j! `! I3 M SELECT TOP 页大小 *
/ @$ @4 `3 Z" n4 P FROM TestTable . @6 c3 k$ p, Z7 V7 E# c. c
WHERE (ID NOT IN
) A& x7 ?' ?) n* b7 S+ g (SELECT TOP 页大小*页数 id x+ w6 j: c# Q# z/ |
FROM 表 8 {* r& p" e# T0 s) [' d! p& N7 E
ORDER BY id)) , s/ s2 m7 y2 D5 S( }7 o
ORDER BY ID 6 b* D8 F* T- w$ S9 E! D) w! r K: ^5 o
3.分页方案二:(利用ID大于多少和SELECT TOP分页)
" u+ G7 q( ]- y( D# s8 |% b 语句形式: - Q+ f# N2 t: m0 K, ]" H# G7 d
SELECT TOP 10 * & a: j& j" @ X+ h1 y5 V
FROM TestTable
1 k* B* R6 `9 c, y( z+ V8 g WHERE (ID > 5 p' Q9 @' G9 _! t# Z
(SELECT MAX(id) - k8 m7 t' Y1 z$ Z0 g% W/ v7 _
FROM (SELECT TOP 20 id
4 X1 f! I% i) _% ? FROM TestTable
! E1 H/ @% b- d, ^2 C3 B ORDER BY id) AS T)) 7 ~& D( P3 O) _: ^7 T, U2 }
ORDER BY ID
5 a4 H- [4 \/ r% Z SELECT TOP 页大小 *
8 x! A' U9 z9 A FROM TestTable + Z6 ^8 L3 B1 v$ {
WHERE (ID >
" w! n8 f- P5 D' g& j) O9 j, Q (SELECT MAX(id)
P" ]' j; [- U" C+ X3 G6 r, i FROM (SELECT TOP 页大小*页数 id
/ \ l) D* T/ F/ x5 j j FROM 表 ) N+ C- |" Q1 P2 R9 U* V
ORDER BY id) AS T))
! P4 H" t0 r$ y) S. J ORDER BY ID ( m w5 X% \0 z8 m2 u0 ~9 }% q; |
4.分页方案三:(利用SQL的游标存储过程分页)
$ N% R$ z6 I' B* [6 @+ |; o: R create procedure XiaoZhengGe 1 B5 ^" }- a7 P5 k9 Q( |
@sqlstr nvarchar(4000),瓷球, --查询字符串 ( C: _9 G$ g. m% Y' ^! O; T9 L' v
@currentpage integer, --第N页 . v4 j1 Y0 u n! z
@pagesize int --每页行数
9 T& \, v$ X3 q+ y* x& L as
/ L$ A1 g& t; ^4 M/ G set nocount on
, P7 f! k; ?7 f* @) N M+ E+ ~) g declare @P1 int, --P1是游标的id
2 S5 S' D' p6 G. z* v @rowcount int ' e! Y/ m; g4 h& M
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@ro wcount output 7 l, m% v" z; d
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,搅拌站,@currentpage as 当前页
; M& @2 ^, [; j3 g( ? set @currentpage=(@currentpage-1)*@pagesize+1
% r5 Z# K: K7 W( M! M/ D exec sp_cursorfetch @P1,16,@currentpage,@pagesize
2 ]! p9 B/ g$ a7 T; ^ exec sp_cursorclose @P1 : y' X( T: [3 o' h; L) Y
set nocount off & e7 S, X. G5 \
其它的方案:如果没有主键,可以用临时表,也可以用方案三做,填料,但是效率会低。 - Z' N( ^: S9 |; t) P5 q1 }
建议优化的时候,加上主键和索引,上海婚纱摄影,查询效率会提高。 # x- l5 g# R4 F$ a) H( U: b+ c
通过SQL 查询分析器,变压器,显示比较:我的结论是: . H# C* Z r& Y, k
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,碳分子筛,需要拼接SQL语句 % K G7 ?0 A5 ], Q
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 , r3 S8 W' a0 H) ]
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用) {% F% v6 K' s/ i- N8 W P' h* E
relative:
% Y" o1 z3 N# O + A! J7 @% M4 }7 U x$ o
) O" V/ f( ?. {7 R* E9 H
behind the excavation process
6 A& o, s8 f2 z; S# J/ v
" l4 o7 E+ \+ a9 V Adoption of the Random
) G% T* F0 y( p
1 Y/ ]: y- I6 S. x, `8 w1 R We tin alarm !
" L& Y3 |9 _1 I6 N* z$ y5 B
$ u3 A2 p# J9 c China's satellite pictures tin be seen the class o
0 r3 g7 X+ ?6 m. \: ]! |
- x. {' v6 B6 Y) j1 y* ~ Copyright statement |
|