• 最效率分页查询


    USE [tablename]
    GO
    /****** Object:  StoredProcedure [dbo].[paginate]    Script Date: 05/12/2013 17:35:10 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:      <Jeremy Menethil>
    -- Create date: <2013-04-03>
    -- Description: <Best Paginate>
    -- =============================================
    ALTER PROCEDURE [dbo].[paginate]
        -- Add the parameters for the stored procedure here
    @tbName nvarchar(100),
    @items nvarchar(500),
    @where nvarchar(100),
    @orderBy nvarchar(100),
    @orderType int,
    @pageSize int,
    @pageCurrent int=1 output,
    @pageCount int output,
    @recordCount int output
    AS
    declare @strSql nvarchar(1000)
    declare @strOrderType nvarchar(50)
    declare @indexA int
    declare @indexB int
    declare @ab int
    declare @str nvarchar(100)
    BEGIN
     
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
         
        --------Set pageSize
        if @pageSize<1
        Begin
            set @pageSize=1
        END
        ------------------------------
        --------Set pageCureent
        if @pageCurrent<1
        Begin
            set @pageCurrent=1
        END
     
        if @pageCurrent>@pageCount
        Begin
            set @pageCurrent=@pageCount
        End
        ------------------------------
         
        --------Set ordertype  
        if @orderType=1
        Begin
            set @strOrderType=' asc'
        End
        else
        Begin
            set @strOrderType=' desc'
        End
        ------------------------------
     
        --------Set Where
        if @where!=''
        Begin
            set @where=' where '+@where
        End
     
        set @str='select @recordCount=COUNT(*) from '+@tbName+@where
        exec sp_executesql @str,N'@recordCount int output,@tbName nvarchar(100)',@recordCount output,@tbName
     
     
        --------Set pageCount
        set @pageCount=@recordCount/@pageSize
        if @recordCount%@pageSize>0
        begin
            set @pageCount=@pageCount+1
        end
        ------------------------------
     
     
        --------Execute Sql
        set @indexA=(@pageCurrent-1)*@pageSize
        set @indexB=@pageCurrent*@pageSize
        set @strSql='select '+@items+' from (select ROW_NUMBER() over(order by '+@orderBy+@strOrderType+') as '
            +'rowNum,* from '+@tbName+@where+') as tbTmp where rowNum >'
            +str(@indexA)+' and rowNum <='+str(@indexB)
        -- Insert statements for procedure here
        exec(@strSql)
     
    END

  • 相关阅读:
    angular11源码探索七[服务二]
    angular11源码探索六[服务基础一]
    有趣的特效,嘤嘤嘤
    angular11学习(十八)
    matplotlib 去掉小方框
    xlrd.biffh.XLRDError 问题报错
    页面点击出现蓝色背景色
    移动端不显示滚动条
    Swiper垂直方向滑动,高度获取不正确的解决方法
    二维树状数组
  • 原文地址:https://www.cnblogs.com/jrmy/p/3131824.html
Copyright © 2020-2023  润新知