搜索
查看: 519022|回复: 0
收起左侧

利用存储过程数据库是(sqlserver

laxu022itr 发表于 2011-7-8 01:45:13 | 显示全部楼层 |阅读模式
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
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表