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

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

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

使用道具 举报

发表回复

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

本版积分规则


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