页过程很多,但是这个是可以支持多字段排序的.
. 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)) |