a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 153|回复: 0

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

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
页过程很多,但是这个是可以支持多字段排序的.
. C! C  Y( F8 T. @" c CREATE PROCEDURE GetRecordByPage  " |2 M% J3 z& e/ M2 O4 L
(  
3 G% N$ ]9 U: V# E8 d@sTable nvarchar(100),  --表名  " z; y7 H" Y! ]
@sPkey nvarchar(50),            --主键(一定要有)  
5 X. c' _. W3 q3 l2 x@sField nvarchar(1000)=’*’,     --字段  
  ^# ^4 `0 A% m9 c@iPageCurr int,                 --当前页数  6 I. S  K3 b1 o1 K
@iPageSize int,                 --每页记录数  1 l5 ~8 {1 z' b6 T
@sCondition nvarchar(1000),  --条件(不需要where)  
, v  |' j' f% B@sOrder nvarchar(100) ,         --排序(不需要order by,需要asc和desc字符)  
, A/ k) Q0 c! s: S+ v  x& `  ?@Counts int=0 output,           --记录条数(已有值:外部赋值,0执行count)  
( L/ n7 a" s- n: A% l@pageCount int=1 output     --查询结果分页后的总页数  
( Q& a( {. p  _5 r- {( I)  ( p  B3 m7 v# m) Z$ O7 N- c
AS  
& k3 O/ O3 s9 r. C  U, t5 DSET NOCOUNT ON  
" ~3 m$ o1 T* c& pDECLARE @sC1 nvarchar(1000),@sC2 nvarchar(1000)  
! n; U9 f$ e  ~  p. m( ?DECLARE @iAsc int,@iDesc int,@iType tinyint    E7 e9 B- l" j2 w% }
DECLARE @sT1 nvarchar(1000),@sT2 nvarchar(1000),@sT3 nvarchar(1000),@sT4 nvarchar(1000),@sSQL nvarchar(4000)  & X& p5 B9 s, G8 n- ]# |5 a
/*----------------------判断where 条件是否空值-------------------*/  ' X8 l; G' }( E; w5 F
IF LEN(@sCondition)>2  
  t  A  _( R) J SELECT @sC1=’ WHERE ’+@sCondition+’ ’, @sC2=’ WHERE ’+@sCondition+’ AND ’  
' H+ k5 J) \* }  y, V ELSE  
- P# o/ B4 G5 [0 o4 ]5 Y2 L. s1 q BEGIN  , }9 [3 Q  U1 Z+ ^
  SELECT @sC1=’’, @sC2=’ WHERE ’  ; y. R' y! }( t7 P
END    o9 F+ I! w, W% N
( r# o# g2 X1 R
SELECT @sT1=UPPER(@sOrder), @sT2=@sOrder, @iType=0, @sOrder=’’, @sT4=UPPER(@sPkey)  
: y$ ~# @' m% O( x/*-----------------------获取查询的数据行数---------------------*/  6 X* q) b; q' o9 s* v7 Y
IF LEN(@sT2)>2  0 [' T, R6 m$ d6 w4 _1 I; Y. Q& {
BEGIN    ?1 `$ d1 B* {5 U
SELECT @iAsc=0, @iDesc=0  2 @3 [2 }  Z7 q1 V4 Q) r  F
IF @sT4=SUBSTRING(@sT1,0,LEN(@sT4)) --存在主建  
" ~  u7 t( T! p6 {9 t* o' f" ^     BEGIN  
# U# O1 S% R: O$ ?5 g: Q: p- a- G  SELECT @iAsc=CHARINDEX(’ASC’,@sT1), @iDesc=CHARINDEX(’DESC’,@sT1)  & }3 i" K$ y' A
END  + y, z( B3 |$ S1 L; D  p9 Y
IF (@iAsc>0 and @iDesc=0) OR ((@iAsc>0 AND @iDesc>0) AND (@iAsc(SELECT MAX(’  * T  a' I% Z/ P; v, D4 [
ELSE IF (@iAsc=0 and @iDesc>0) OR ((@iAsc>0 AND @iDesc>0) AND (@iAsc>@iDesc))
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 06:30 , Processed in 0.744008 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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