支持多字段排序的SQLServer分页存储过程
来源:优易学  2011-11-5 11:46:54   【优易学:中国教育考试门户网】   资料下载   IT书店
分页过程很多,但是这个是可以支持多字段排序的.
 CREATE PROCEDURE GetRecordByPage 

@sTable nvarchar(100),  --表名 
@sPkey nvarchar(50),            --主键(一定要有) 
@sField nvarchar(1000)=’*’,     --字段 
@iPageCurr int,                 --当前页数 
@iPageSize int,                 --每页记录数 
@sCondition nvarchar(1000),  --条件(不需要where) 
@sOrder nvarchar(100) ,         --排序(不需要order by,需要asc和desc字符) 
@Counts int=0 output,           --记录条数(已有值:外部赋值,0执行count) 
@pageCount int=1 output     --查询结果分页后的总页数 

AS 
SET NOCOUNT ON 
DECLARE @sC1 nvarchar(1000),@sC2 nvarchar(1000) 
DECLARE @iAsc int,@iDesc int,@iType tinyint 
DECLARE @sT1 nvarchar(1000),@sT2 nvarchar(1000),@sT3 nvarchar(1000),@sT4 nvarchar(1000),@sSQL nvarchar(4000) 
/*----------------------判断where 条件是否空值-------------------*/ 
IF LEN(@sCondition)>2 
 SELECT @sC1=’ WHERE ’+@sCondition+’ ’, @sC2=’ WHERE ’+@sCondition+’ AND ’ 
 ELSE 
 BEGIN 
  SELECT @sC1=’’, @sC2=’ WHERE ’ 
 END 

SELECT @sT1=UPPER(@sOrder), @sT2=@sOrder, @iType=0, @sOrder=’’, @sT4=UPPER(@sPkey) 
/*-----------------------获取查询的数据行数---------------------*/ 
IF LEN(@sT2)>2 
BEGIN 
 SELECT @iAsc=0, @iDesc=0 
 IF @sT4=SUBSTRING(@sT1,0,LEN(@sT4)) --存在主建 
     BEGIN 
  SELECT @iAsc=CHARINDEX(’ASC’,@sT1), @iDesc=CHARINDEX(’DESC’,@sT1) 
 END 
 IF (@iAsc>0 and @iDesc=0) OR ((@iAsc>0 AND @iDesc>0) AND (@iAsc<@iDesc)) 
  SELECT @iType=1, @sT3=’>(SELECT MAX(’ 
 ELSE IF (@iAsc=0 and @iDesc>0) OR ((@iAsc>0 AND @iDesc>0) AND (@iAsc>@iDesc)) 

责任编辑:虫虫

文章搜索:
 相关文章
热点资讯
热门课程培训