a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 117|回复: 0

[考试辅导] 支持多字段排序的SQLServer分页存储技术

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
页过程很多,但是这个是可以支持多字段排序的.1 m4 j" b% r0 T, m& Z0 u
CREATE PROCEDURE GetRecordByPage  
  _$ f; d5 B7 v(  " i0 t+ d% h1 X+ w- r2 W" |
@sTable nvarchar(100),  --表名  2 ^( l3 k- |3 V) V5 A2 |
@sPkey nvarchar(50),            --主键(一定要有)  3 r2 R! C* t/ P5 q9 m0 g+ i
@sField nvarchar(1000)=’*’,     --字段  ' w$ l7 _/ d% y5 O7 O: Y7 m( X8 J
@iPageCurr int,                 --当前页数  5 z2 D' n! ]+ ?  K. e% V
@iPageSize int,                 --每页记录数  * A3 {) \! a4 u/ o) ]0 s
@sCondition nvarchar(1000),  --条件(不需要where)  
; d8 Y) K/ P# I5 O@sOrder nvarchar(100) ,         --排序(不需要order by,需要asc和desc字符)  
4 U3 u; `. \: f/ L# l+ x. J; |@Counts int=0 output,           --记录条数(已有值:外部赋值,0执行count)  ( e" j% Y5 m2 N
@pageCount int=1 output     --查询结果分页后的总页数  - }) e' b3 c$ n; O) P
)  
8 J; ~  V7 G& K, k; ZAS  
4 d9 o3 w: Q6 s; T; OSET NOCOUNT ON  - Q" `' ~8 S" }
DECLARE @sC1 nvarchar(1000),@sC2 nvarchar(1000)  8 Y" l6 ]# Y* n  [0 y- C/ \
DECLARE @iAsc int,@iDesc int,@iType tinyint  
8 v0 Z1 E6 h* v% G4 R- W; J2 zDECLARE @sT1 nvarchar(1000),@sT2 nvarchar(1000),@sT3 nvarchar(1000),@sT4 nvarchar(1000),@sSQL nvarchar(4000)  
1 I8 L! ^" c8 |6 e* l/ u) L# k/*----------------------判断where 条件是否空值-------------------*/  ' z( y* a* g! F+ F
IF LEN(@sCondition)>2  
8 h/ ^% ?' `' J& V, B9 ^+ s SELECT @sC1=’ WHERE ’+@sCondition+’ ’, @sC2=’ WHERE ’+@sCondition+’ AND ’  
: z1 c& d6 n! ]1 n4 l! X1 m* D; L4 h ELSE  
& w0 _  R# v# d( k+ M8 E* G BEGIN  
) V) T4 `1 x/ |5 t+ b  SELECT @sC1=’’, @sC2=’ WHERE ’  3 L9 @8 i2 L1 k( n3 s% u4 I
END  6 X5 v) ^7 H# X1 i
4 b0 |4 j! Y9 M3 c) l* [4 i
SELECT @sT1=UPPER(@sOrder), @sT2=@sOrder, @iType=0, @sOrder=’’, @sT4=UPPER(@sPkey)  
* I0 e5 I# f$ M9 l0 r1 {; N/*-----------------------获取查询的数据行数---------------------*/  + p* R2 Z- R, x" b4 ^
IF LEN(@sT2)>2  
! K. C6 K0 L$ U/ ]BEGIN  , M5 l0 m+ E3 H, `' n8 r" p- c
SELECT @iAsc=0, @iDesc=0  , M1 p1 x0 @+ v; S* Y: B
IF @sT4=SUBSTRING(@sT1,0,LEN(@sT4)) --存在主建  2 C8 S/ S# q) i3 R6 Z) m
     BEGIN  ; P* G; \; y: p+ T7 w1 r5 h! E
  SELECT @iAsc=CHARINDEX(’ASC’,@sT1), @iDesc=CHARINDEX(’DESC’,@sT1)  
0 X* Y" F$ r( z# k END  ) ^' p& \* Q1 F% z2 ~( g: J
IF (@iAsc>0 and @iDesc=0) OR ((@iAsc>0 AND @iDesc>0) AND (@iAsc(SELECT MAX(’  
1 J6 R+ `. E/ Z8 R# j  [3 B" a) p/ k# _ ELSE IF (@iAsc=0 and @iDesc>0) OR ((@iAsc>0 AND @iDesc>0) AND (@iAsc>@iDesc))
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-8 00:22 , Processed in 0.169838 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表