当前位置:Gxlcms > 数据库问题 > sql分页存储过程,带求和、排序

sql分页存储过程,带求和、排序

时间:2021-07-01 10:21:17 帮助过:2人阅读

PROCEDURE [dbo].[sp_TBTest_Query] ( @PageSize INT, --每页多少条记录 @PageIndex INT = 1, --指定当前为第几页 @PageCount INT OUTPUT, --返回总页数 @RecordCount INT OUTPUT, --记录总和 @OrderField VARCHAR(5000), --排序字段(多字段,不含Order By) @strWhere VARCHAR(5000), --条件语句(不用加where) @SumColumnNames NVARCHAR(200), --汇总字段 @SumResult NVARCHAR(200) OUTPUT --返回汇总结果 ) AS BEGIN DECLARE @SQL NVARCHAR(MAX) = ‘‘; --条件处理 IF ISNULL(@strWhere, ‘‘) =‘‘ BEGIN SET @strWhere=1=1 end --计算总记录数 SET @SQL = NSELECT @A = count(*) FROM TBTest where + @strWhere EXEC sp_executesql @SQL, N@A int OUTPUT, @RecordCount OUTPUT; --计算总页数 SELECT @PageCount = CEILING(( @RecordCount + 0.0 ) / @PageSize); --处理页数超出范围情况 IF @PageIndex <= 0 SET @PageIndex = 1; IF @PageIndex > @PageCount SET @PageIndex = @PageCount; --处理开始点和结束点 DECLARE @StartRecord INT; DECLARE @EndRecord INT; SET @StartRecord = ( @PageIndex - 1 ) * @PageSize + 1; SET @EndRecord = @StartRecord + @PageSize - 1; --计算汇总 IF ISNULL(@SumColumnNames, ‘‘) <> ‘‘ BEGIN SET @SQL = NSELECT @A = (CAST(ISNULL(SUM( + REPLACE(@SumColumnNames, ,,), 0) AS NVARCHAR(30)) + ‘‘,‘‘ + CAST(ISNULL(SUM() + ), 0) AS NVARCHAR(30))) FROM TBTest where +@strWhere + EXEC sp_executesql @SQL, N@A NVARCHAR(200) OUTPUT, @SumResult OUTPUT; END --返回结果 SET @sql=N SELECT * FROM ( SELECT * ,ROW_NUMBER() OVER(ORDER BY id DESC) AS RowID FROM TBTest where +@strWhere +N) t WHERE RowID BETWEEN +CONVERT(NVARCHAR(10),@StartRecord)+N AND +CONVERT(NVARCHAR(10),@EndRecord) EXEC sp_executesql @SQL END

 

 

  • 调用代码

 

     DECLARE    @PageSize INT=10,                        --每页多少条记录
        @PageIndex INT = 2,                    --指定当前为第几页
        @PageCount INT     ,                --返回总页数
        @RecordCount INT  ,            --记录总和

        @OrderField VARCHAR(5000)=ID,            --排序字段(多字段,不含Order By)
        @strWhere VARCHAR(5000)=‘‘,            --条件语句(不用加where)

        @SumColumnNames NVARCHAR(200)=Age,        --汇总字段
        @SumResult NVARCHAR(200)          --返回汇总结果


EXEC   sp_TBTest_Query  @PageSize,@PageIndex,@PageCount OUTPUT,@RecordCount OUTPUT,@OrderField,@strWhere,@SumColumnNames,@SumResult OUTPUT

SELECT @PageCount AS PageCount,@RecordCount AS RecordCount,@SumResult AS SUM
  • 测试结果

技术分享

技术分享

我在项目中遇到一个问题,就是元数据由分组,然后再连接,为了加快查询效率,我不得不剔除传入Where条件字符串中的一个条件,大概写法如下:

DECLARE @strWhere NVARCHAR(max)=‘ID=1 and Age=2 and address=‘‘销售部‘‘‘
DECLARE @str1 NVARCHAR(max)=‘‘
DECLARE @str2 NVARCHAR(max)=‘‘
IF ISNULL(@strWhere, ‘‘)<>‘‘
BEGIN
IF( CHARINDEX(‘Age‘,@strWhere)>0 )
BEGIN
SET @str1 =SUBSTRING(@strWhere,CHARINDEX(‘Age‘,@strWhere),LEN(@strWhere))
if CHARINDEX(‘and‘,@str1)>0
begin
SET @str2 =SUBSTRING(@str1,CHARINDEX(‘and‘,@str1),LEN(@str1))
end

SET @strWhere=SUBSTRING(@strWhere,0,CHARINDEX(‘Age‘,@strWhere))+N‘ 1=1 ‘+@str2

end

END

 

sql分页存储过程,带求和、排序

标签:

人气教程排行