• SQL Server 存储过程通用分页


    ALTER  PROCEDURE [dbo].[NTP_Page] 
      @IndexField varchar(50)='id',
      @AllFields varchar(1000)='*', --需要返回的列 
      @TablesAndWhere varchar(1000)='', -- 表名和条件,from后面的,不要from,要一条where
      @OrderFields varchar(255)='',-- 排序的字段名
      @PageSize int = 10, -- 页尺寸
      @PageIndex int = 1, -- 页码
      @RecordCount int output,
      @PageCount int output
    AS
    if @PageSize < 1
      set @PageSize = 10
      declare @strSQL nvarchar(4000) -- 主语句
      set @strSQL = 'select @RecordCount=count('+ @IndexField +') from '+ @TablesAndWhere
      exec sp_executesql @strSQL,N'@RecordCount int output',@RecordCount out
      if @RecordCount % @PageSize = 0
        set @PageCount = @RecordCount/@PageSize
      else
        set @PageCount = @RecordCount/@PageSize+1
      if(@PageIndex > @PageCount)
        set @PageIndex = @PageCount
      if @PageIndex < 1
        set @PageIndex = 1
      if @PageIndex = 1
        set @strSQL='select top ' + CAST(@PageSize as nvarchar) + ' ' + @AllFields + ' from '+ @TablesAndWhere + ' ' + @OrderFields
      else
        begin
          declare @start int
          set @start = (@PageIndex - 1) * @PageSize
          set @strSQL= 'select top ' + CAST(@PageSize as nvarchar) + ' ' +  @AllFields  + ' from ' +  @TablesAndWhere + ' and '+ @IndexField  + ' not in (select top ' + CAST(@start as nvarchar) + ' ' + @IndexField + ' from ' + @TablesAndWhere + ' ' + @OrderFields +') '+ @OrderFields
        end
        print @strSQL
        exec sp_executesql @strSQL
    将来的你,一定会感谢现在努力的自己!
  • 相关阅读:
    C++实现反射
    ubuntu下安装secureCRT(含破解方法)
    2018 年力扣高频算法面试题汇总-难题记录-鸡蛋掉落
    对于opencv全面貌的认识和理解
    关于c++类的一些知识的总结
    vs2017+opencv4.0.1安装配置详解(win10)
    leetcode-120-三角形最小路径和
    leetcode-64-最小路径和
    leetcode-917-仅仅反转字母
    leetcode-914-卡牌分组
  • 原文地址:https://www.cnblogs.com/GreatPerson/p/8060644.html
Copyright © 2020-2023  润新知