分页存储过程(2)
来源:互联网 发布:企业软件定制 编辑:程序博客网 时间:2024/06/05 14:30
@sTable nvarchar(700), --表名
@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))
BEGIN
SELECT @iType=1, @sT3='<(SELECT MIN('
END
SET @sOrder=' ORDER BY '+@sT2
END
/*-------------------------获取查询的数据行数----------------------*/
--IF (@Counts<1)
--BEGIN
--SET @sSQL='SELECT @Counts=Count(0) FROM '+@sTable+@sC1
--EXEC sp_executesql @sSQL,N'@Counts int OUT',@Counts OUT
--END
SET @sSQL='SELECT @Counts=Count(0) FROM '+@sTable+@sC1
EXEC sp_executesql @sSQL,N'@Counts int OUT',@Counts OUT
IF(2147483647 = @ipageSize)
SET @pageCount = 1
ELSE
BEGIN
SET @pageCount=(@Counts+@ipageSize-1)/@ipageSize
END
IF @iPageCurr>@pageCount
SET @iPageCurr=@pageCount
SELECT @iPageCurr=(CASE WHEN @Counts<(@iPageCurr-1)*@iPageSize THEN CEILING(@Counts/@iPageSize) WHEN @iPageCurr<1 THEN 1 ELSE @iPageCurr END)
IF (@iPageCurr>1) AND (@iType=1)
SET @sSQL='SELECT TOP '+CAST(@iPageSize AS nvarchar)+' '+@sField+' FROM '+@sTable+@sC2+@sPkey+@sT3+@sPkey+') FROM (SELECT TOP '+CAST((@iPageCurr-1)*@iPageSize AS nvarchar)+' '+@sPkey+' FROM '+@sTable+@sC1+@sOrder+') AS tbTemp)'+@sOrder
ELSE IF (@iPageCurr>1) AND (@iType=0)
SET @sSQL='SELECT '+@sField+' FROM '+@sTable+@sC2+@sPkey+' IN (SELECT TOP '+CAST(@iPageSize AS nvarchar)+' '+@sPkey+' FROM '+@sTable+@sC2+@sPkey+' NOT IN(SELECT TOP '+CAST((@iPageCurr-1)*@iPageSize AS nvarchar)+' '+@sPkey+' FROM '+@sTable+@sC1+@sOrder+')'+@sOrder+')'+@sOrder
ELSE
BEGIN
SET @sSQL='SELECT TOP '+CAST(@iPageSize AS nvarchar)+' '+@sField+' FROM '+@sTable+@sC1+@sOrder
END
- 分页存储过程(2)
- 分页存储过程2
- 分页存储过程2
- 分页存储过程2
- 存储过程分页2
- 分页(存储过程)
- 存储过程 实现分页功能(2)
- 数据海量分页存储过程(2)
- MySql分页存储过程2
- asp 存储过程(分页)
- 分页存储过程(1)
- 存储过程(指针)分页
- (转载)分页存储过程
- 存储过程五(分页)
- SQL Server 分页通用存储过程(2)
- 经典存储过程,(.NET存储过程分页)
- orcale分页 存储过程分页
- MSSQL 存储过程分页 测试 2
- rpm 命令用法详谈:
- 努力
- Asp.net 自动发送邮件的方法
- C# 语法糖(Csharp Syntactic sugar)大汇总(转自:http://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html)
- Android 大屏幕设置
- 分页存储过程(2)
- [编程练习与总结2] 根据关键字进行字符串拷贝
- asp.net的sql防注入
- 3.34如何锁定一个分割器Splitter窗口,从而使用户不能移动分割线?
- Asp.net 打印web 网页 如何不显示 网址 页码
- 让内向者成为职场社交高手
- 多附件上传源码
- ACM与追MM之间的关系
- C++容器和算法