27,579
社区成员
发帖
与我相关
我的任务
分享
if OBJECT_ID('sp_paging_Custom2005','P') is not null drop proc sp_paging_Custom2005
go
Create proc sp_paging_Custom2005
@tbname varchar(128), --*表名称
@PageCurrent int, --显示页码(默认)
@PageSize int, --每页显示条数(默认)
@FieldShow varchar(1024), --需要查询字段(默认查询全部字段)
@FieldOrder varchar(1024), --排序
@WhereString varchar(1024), --查询条件
@RecordCount int output --输出总单据数
as
Begin
set nocount on
/*定义辅助变量*/
declare @sql nvarchar(max), --用来执行动态语句
@StartPoint int, --开始节点
@EndPoint int --结束点
----------------------------------------------------------------------------------
/*第一步:过滤*/
--核对是否存在该表
if OBJECT_ID(@tbname,'U') is null and OBJECT_ID(@tbname,'V') is null
Begin
RaisError('无法找到该表或者视图,请核对参数信息!',16,1)
Return
End
--核对是否有排序字段
if ISNULL(@FieldOrder,'')=''
Begin
--RaisError('缺少排序参数,请核对参数信息!',16,1)
--return
set @FieldOrder='getdate()'
End
--如果没有指定页数,默认设置为第一页
if ISNULL(@PageCurrent,0)=0
set @PageCurrent=1
--如果没有指定每页条数,默认为条每页
if ISNULL(@PageSize,0)<0
set @PageSize=10
--如果没有指定显示列,设置为列为*
if ISNULL(@FieldShow,'')=''
set @FieldShow='*'
--where条件补全信息
set @WhereString=case when ISNULL(@WhereString,N'')=N''
then N''
else N'where 1=1 and '+@WhereString
end
--Order by 条件补全
set @FieldOrder= N'Order by '+@FieldOrder
----------------------------------------------------------------------------------
/*第二步:统计出总条数*/
set @sql=
N'select
@RecordCount=count(1)
from '
+@tbname+N' '
+@WhereString+N' '
exec sp_executesql @sql,N'@RecordCount int output',@RecordCount output
----------------------------------------------------------------------------------
/*第三步:计算开始点,结束点,拼接SQL动态语句得到所要查询信息*/
select @StartPoint=(@PageCurrent-1)*@PageSize+1,
@EndPoint=@StartPoint+@PageSize-1,
--拼接动态语句
@sql=
N'select '+@FieldShow+
N' from
(
select row_number() over('+@FieldOrder+N') as CT_RowID, '+@FieldShow+
N' from '+@tbname+
N' '+@WhereString+
N' '+
N')tb
where CT_RowID between '+ltrim(@StartPoint)+N' and '+ltrim(@EndPoint)
exec(@sql)
set nocount off
End