- UID
- 1415
- 主题
新手上路
- 金钱
-
- 威望
-
- 贡献
-
- 日志
- 好友
- 帖子
- 主题
- 听众
- 收听
- 性别
- 保密
|
2005)
. c' U2 |0 D `: T5 s' _$ x4 S7 ~ CREATE PROCEDURE [dbo].[GetUsers] --得到用户列表,注意这里的参数
# ~* O4 Y2 t1 k. X6 A @RowIndex int, & m; b( b6 P: l
@RecordCount int
9 a$ k! K, b8 g! i( q: e3 U- o AS
$ T1 J: L- w! U5 c' Q BEGIN
( h4 U4 J: O3 B; L. r, Y) K SET NOCOUNT ON;
6 r; T% }. g3 h" O9 t With VUsers as (
" \. P7 z3 U0 }. \ M select *,row_number() over (order at UserID desc) for RowNum
; z8 g2 t: B2 H" ~# ? from MyUsers 1 }- q$ ]. {2 h
)
; V. p& ?# s" q0 l# K. r select * from VUsers $ a& t0 b8 g% G
where RowNum > @RowIndex and RowNum <= (@RowIndex+@RecordCount) ! F3 | h) {: B: W) `- }. c
END
6 v# R# X& C$ v* L. @+ | 2. 分页方案一:(利用Not In和SELECT TOP分页) % S+ ~1 N- Z- H6 }
语句形式:
5 L5 ~0 {5 a, w% s' u5 ?. H/ P SELECT TOP 10 *
! ]/ M* \1 q- d- i! `) l6 \ FROM TestTable 7 A8 m! Q6 `1 l1 M9 U
WHERE (ID NOT IN
, C5 |( _! X$ d! n% P (SELECT TOP 20 id $ }5 \9 u% S1 a. w J7 [
FROM TestTable " Y) Y* h( H/ g
ORDER BY id))
( e* A$ h& d% I6 W5 f3 r7 @ ORDER BY ID " e2 c8 U; _: ?' ^2 |# l
SELECT TOP 页大小 *
" i+ k$ {1 [% ~' l. P8 q FROM TestTable R: F) a- g6 O# {+ l& D
WHERE (ID NOT IN
' w( _! C0 q; X6 }) |! A% x (SELECT TOP 页大小*页数 id
5 R, ^9 n+ @$ u5 Y) ~' I! C FROM 表
6 V, H d7 B8 t: n2 F ORDER BY id)) # O' U7 a. P/ u% Y$ p5 ]
ORDER BY ID - I3 Y9 b' t3 Q6 J) q; y- m6 O
3.分页方案二:(利用ID大于多少和SELECT TOP分页)
2 h: ? X' J# d/ _" T8 o 语句形式: 0 X- E2 X8 ^6 Z; m" t: M
SELECT TOP 10 * . d) K; H: L& B! I, ^" c
FROM TestTable ( K" ?8 O9 H1 G$ }! Q: E
WHERE (ID > * a& u8 |# T$ t' l" _: n# ~
(SELECT MAX(id) 3 f5 A' D; E, V0 B
FROM (SELECT TOP 20 id + C: n" E, q7 p
FROM TestTable
( c% b6 }) Z3 ]1 C- |* V- R ORDER BY id) AS T)) " b* ~ b p2 L: \
ORDER BY ID
0 K) w4 S0 X1 i2 Z: o SELECT TOP 页大小 * 0 X/ N; r/ u# {. T, y0 @
FROM TestTable
) J; |! u2 k- D/ x. [+ U! U5 f WHERE (ID >
1 a: ~* C7 j! Z% W5 W) x (SELECT MAX(id) $ E. e4 m' B8 v6 Q
FROM (SELECT TOP 页大小*页数 id
! U& r* L8 q* r) ~8 n' z FROM 表 ( L8 ]9 E- W5 k5 W" H2 }
ORDER BY id) AS T)) / j; V, J: T) k! R. P$ L& g* E
ORDER BY ID 3 M9 K- D% N- e! w
4.分页方案三:(利用SQL的游标存储过程分页)
: t4 S" d5 P6 w; _4 S% @ create procedure XiaoZhengGe 7 t M, O N. T5 _) C4 K7 h
@sqlstr nvarchar(4000),瓷球, --查询字符串
E! G& c" @3 E% W @currentpage integer, --第N页
9 [' O# j4 d! `6 p9 S6 A3 H0 p f0 ] @pagesize int --每页行数 . c8 G* B# d6 f
as
" `4 I/ g* t2 s+ z/ R) e set nocount on - }+ T7 k1 W9 f6 i) @0 L8 |' {" f+ _
declare @P1 int, --P1是游标的id / ^! S: u( b9 L P
@rowcount int ) e. Y- D$ l8 A2 \2 Q \6 Z
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@ro wcount output 2 }1 P3 i! Q6 l' X6 P
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,搅拌站,@currentpage as 当前页 $ K! [( a# G1 B; Q. a
set @currentpage=(@currentpage-1)*@pagesize+1
/ g& J+ x" |1 X/ s exec sp_cursorfetch @P1,16,@currentpage,@pagesize $ P: r. j1 h; l7 O4 A P
exec sp_cursorclose @P1 ; }1 R3 n, [- k! y& j
set nocount off 0 O; ?" H+ R) \) _
其它的方案:如果没有主键,可以用临时表,也可以用方案三做,填料,但是效率会低。 / g4 S' P( I$ x3 c
建议优化的时候,加上主键和索引,上海婚纱摄影,查询效率会提高。
6 T# v9 k L/ v2 n( |! I5 q 通过SQL 查询分析器,变压器,显示比较:我的结论是: . V& n/ V6 }# a# u' a U' }" `
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,碳分子筛,需要拼接SQL语句 / }# s& O. n- Y: V9 y+ X Z5 d
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 M2 F; u, @2 k) ?2 |
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
. e A% D) `4 M0 b u* grelative:4 t2 l! L7 k7 s
* ~) ^- ^' b! ?1 P0 c4 L; H' k ' H2 E6 h, e; }+ _
behind the excavation process
J) A4 t, W. p2 u% q
7 \$ g4 w, z0 l! p) p& b. b Adoption of the Random% ?/ ` ^8 u; X* ~/ m
) j3 J4 \/ y. N9 s1 ~. k. \ We tin alarm !3 `# Z: h% ?, c% ]1 ?
1 G* C. a& c( @( V. S: \* Y4 u China's satellite pictures tin be seen the class o
5 ?. h9 L/ ^3 c. O; ?
+ N. j! L. U- F4 I! s Copyright statement |
|