支持多字段排序的SQLServer分页存储过程

文章作者 100test 发表时间 2008:03:31 12:08:51
来源 100Test.Com百考试题网


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

相关文章


让Windows自带的磁盘清理工具功能更强
WindowsVista系统还原占内存解决方法
ORACLE普通表转换成分区表的方法及代码
存储过程使用了指针,并调用了外部了时间参数!
支持多字段排序的SQLServer分页存储过程
SQLServer2000报40错误解决方法
快速理解Oracle归档模式
m ql大小写区分方法
什么是聚簇索引?
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛