zoukankan      html  css  js  c++  java
  • 超级强大的 分页Sql存储过程

    CREATE PROCEDURE [dbo].[GetPage]
     @StrSelect varchar(max) = null,  --欲显示的列(多列用逗号分开),例如:id,name
        @StrFrom varchar(max) = null,  --表名称,或者是表连接字符串,多表连接例如:student as s inner join dwinfo as dw on s.dwbh=dw.bh
        @StrWhere varchar(max) = null,  --查询条件,null代表没有条件,单条件或者多条件,多条件例如:name='啊' and id=10
        @StrOrder varchar(max) = null,  --排序列(多个排序列用逗号分开),例如:id desc,name as
        @ItemCount bigint = 0 output,  --总记录数
        @PageSize int = 50,     --每页显示条数
     @PageIndex int = 1     --当前页

    AS
    BEGIN
        SET NOCOUNT ON;
        Declare @sql nvarchar(4000);
        Declare @totalRecord int;
        if (@StrWhere ='''' or @StrWhere='' or @StrWhere is NULL)
        set @sql = 'select @totalRecord = count(*) from ' + @StrFrom
        else
        set @sql = 'select @totalRecord = count(*) from ' + @StrFrom + ' where ' + @StrWhere
        EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@ItemCount OUTPUT
        declare @SqlQuery varchar(max)
    if(@PageIndex=1)
        begin
      if(@StrWhere is null)
      set @SqlQuery='select top '+convert(varchar,@PageSize)  + ' row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom;
            else
      set @SqlQuery='select top '+convert(varchar,@PageSize) + ' row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom+' where '+@StrWhere;
     end
    else
     begin
      if(@StrWhere is null)
      begin
       set @SqlQuery='with cte as (select row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom+')select * from cte where RowNumber between '+
       convert(varchar,((@PageIndex-1)*@PageSize)+1)+' and '+
       convert(varchar,@PageIndex*@PageSize)
      end
      else
      begin
       set @SqlQuery='with cte as (select row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom+' where '+@StrWhere+') select * from cte where RowNumber between '+
       convert(varchar,((@PageIndex-1)*@PageSize)+1)+' and '+
       convert(varchar,@PageIndex*@PageSize)
      end
     end
     print @SqlQuery
     exec (@SqlQuery)
    END

    insert into TBjhMovie values(newid(),'视频一','123','信息')

    select *from tbjhmovie


    declare @pageCount bigint ;
    exec [GetPage] 'movieName,movieMessage','[TBjhMovie]',null,'movieName desc',@pageCount,2,1
    select @pageCount

    ------------------------------------------此存储过程有单眼皮小猪 曹春辉 编写。--------------------------------

  • 相关阅读:
    环境搭建-----IntelliJ idea之resin配置
    Maven的pom.xml文件详解------Build Settings
    JVM调优总结
    JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
    JVM之字节码——Class文件格式
    java中的深复制和浅复制
    java创建对象的四种方式
    iOS获取所有机型
    博客已停止更新,请移步简书
    NSCache的简单使用
  • 原文地址:https://www.cnblogs.com/nidakun/p/2601420.html
Copyright © 2011-2022 走看看