zoukankan      html  css  js  c++  java
  • 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
    将来的你,一定会感谢现在努力的自己!
  • 相关阅读:
    关于java.lang.OutOfMemoryError: Java heap space的错误分析
    对TCP/IP网络协议的深入浅出归纳
    leetcode面试准备:Contains Duplicate I && II
    leetcode面试准备:Count Complete Tree Nodes
    leetcode面试准备: Jump Game II
    leetcode面试准备: Jump Game
    LeetCode解题报告:Linked List Cycle && Linked List Cycle II
    最小栈的实现与优化
    面试:归并排序
    leetcode面试准备:Decode Ways
  • 原文地址:https://www.cnblogs.com/GreatPerson/p/8060644.html
Copyright © 2011-2022 走看看