zoukankan      html  css  js  c++  java
  • SQL 存储过程 分页

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go




    -- =============================================
    -- Author: ***
    -- Create date: 2014-03-27 20:00
    -- Description: 採用最新的 row_number() over 技术高效分页方法
    -- =============================================
    ALTER PROCEDURE [dbo].[P_Public_Paging]
    @TableName Nvarchar(4000), --要显示的表、视图、或是SQL语句
    @FieldName nvarchar(4000) = '*', --要显示的字段列表,全部字段是* 大视图最好不要用*
    @PageSize int, --每页显示的记录个数(每页条数小于1则修正成10)
    @PageIndex int=1, --要显示那一页的记录(当前页小于1或自己主动修正为1)
    @Where  nvarchar(2000) = '1=1', --查询条件,不需where
    @OrderBy nvarchar(2000), --排序字段,最好是索引字段
    @PageCount int = 1 output, --返回分页后的总页数
    @RecordCount int =0 output --返回查询到的记录数
    AS
    BEGIN
    Declare @SelectSql nvarchar(4000) --构造Sql查询词句
    if @PageSize < 1 set @PageSize = 10--假设小每页大小小于1则修正成10
    set @SelectSql = ' select @RecordCount = count(0) from ' + @TableName + ' where ' + @Where
    exec sp_executesql @SelectSql ,N'@RecordCount int out ',@RecordCount out
    --计算@PageCount的值
    if @RecordCount <= @PageSize
    set @PageCount = 1
    else if @RecordCount % @PageSize = 0
    set @PageCount = (@RecordCount / @PageSize )
    else
    set @PageCount = (@RecordCount / @PageSize ) + 1
    --检查@PageIndex的值
    if @PageIndex> @PageCount
    set @PageIndex= @PageCount
    if @PageIndex < 1
    set @PageIndex = 1
    set @SelectSql = 'select '+@FieldName +'from (' +
    'select row_number() over (order by ' + @OrderBy + ')  RowID ,' + @FieldName +
    ' from ' + @TableName + ' where ' + @Where +
    ') a where a.RowID > ' + cast((@PageIndex -1) * @pageSize as varchar(128)) +
    ' and a.RowID <= ' + cast(@PageIndex * @pageSize as varchar(128))
    exec sp_executesql @SelectSql
    select @PageCount,@RecordCount
    END



    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    RSS Reader in PC & iPhone
    Implementation Notes: Runtime Environment Map Filtering for Image Based Lighting
    A implementaion for 2D blue noise
    Specular Aliasing与Specular Leaking
    PBR Metallic/Roughness工作流中Albedo与F0的计算方法
    Mathematica .nb程序运行不下去的原因
    关于ddx/ddy重建法线在edge边沿上的artifacts问题
    make: 警告:检测到时钟错误。您的创建可能是不完整的。
    C++ 变长模板参数
    CMake set 语法
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4690734.html
Copyright © 2011-2022 走看看