• sql2008分页(常用两种方法)


    -------------------------------------------------------------------------------------第一种-----------------------------------------------------------------------------

    CREATE PROC [dbo].[sp_get_usergroup_by_parentid_page]

    @parentId int,
    @pageSize int, --每页显示的记录数量
    @page int output, --页码数
    @totalCount int output, --返回总记录数
    @totalPage int output, --返回总的页数
    @sort varchar(200) --排序(不带ORDER)
    AS
    BEGIN

    declare @condition varchar(200)
    set @condition = ' user_group_status = 1 and user_group_parent_id = '+CAST(@parentId as varchar(200))+' '

    SET NOCOUNT ON;

    EXEC sp_pager
    @page = @page OUTPUT,
    @pageSize = @pageSize,
    @tableName = 't_user_group',
    @columns = N'user_group_id, user_group_name, user_group_sequence, user_group_parent_id,user_group_is_leaf,user_group_status,user_group_created_date',
    @condition = @condition,
    @sort = @sort,
    @totalCount = @totalCount OUTPUT,
    @totalPage = @totalPage OUTPUT

    END

    -------------------------------------------------------------------------------------create sp_pager------------------------------------------------------------------

    CREATE Procedure [dbo].[sp_pager]
    @page int output, --页码数
    @pageSize int, --每页显示的记录数量
    @tableName varchar(200), --数据表的名称
    @columns varchar(MAX), --要读取的列
    @condition varchar(MAX)=NULL, --读取条件(不带WHERE)
    @sort varchar(200), --排序(不带ORDER)
    @totalCount int output, --返回总记录数
    @totalPage int output --返回总的页数
    AS
    BEGIN
    if '' in (@tableName,@columns,@sort)
    begin
    return
    end

    set @condition=case when @condition is not null and @condition<>'' then ' where '+@condition else '' end

    -- 计算总帖数
    declare @sql nvarchar(max)
    set @sql ='select @total=count(*) from '+@tablename+@condition
    exec sp_executesql @sql,N'@total int out',@totalCount output

    -- 计算总页数
    set @totalPage=ceiling(1.*@totalCount/@pageSize)

    -- 处理@Page参数
    set @page=case when @page>@totalPage then @totalPage when @page<1 then 1 else @page end

    set @sql='with _x as(select top ('+cast(@page*@pageSize as varchar(20))+') row_number() over(order by '
    +@sort+') row_num,'+@columns+' from '+@tableName+@condition+' order by '+@sort+') select '+@columns+' from _x where row_num>'+cast((@page-1)*@pageSize as varchar(10))

    print @sql
    exec(@sql)
    END

    -------------------------------------------------------------------------------------第二种-----------------------------------------------------------------------------

    CREATE procedure [dbo].[sp_get_configitemid_by_Page]
    @configitemid int,
    @pageSize int, --每页显示的记录数量
    @page int output, --页码数
    @totalCount int output, --返回总记录数
    @totalPage int output, --返回总的页数
    @condition nvarchar(200)=NULL --读取条件(不带WHERE)

    as
    BEGIN

    DECLARE @config_item_id INT
    SET @config_item_id = @configitemid

    select @totalCount = COUNT(*) FROM
    (
    SELECT tuir.[user_id]
    FROM t_role_config trc
    JOIN t_user_in_role tuir ON trc.role_id = tuir.role_id
    WHERE trc.config_item_id = @config_item_id
    UNION
    SELECT tuc.[user_id]
    FROM t_user_config tuc WHERE tuc.config_item_id = @config_item_id
    ) t

    create table #viewconfig_get(user_id int ,user_name nvarchar(50),user_comment nvarchar(50),user_created_date datetime,pwd_lastmodify_date smalldatetime)

    ;WITH _t AS (
    SELECT tuir.[user_id],tu.user_name,tu.user_comment,tu.user_created_date,tu.pwd_lastmodify_date
    FROM t_role_config trc
    JOIN t_user_in_role tuir ON trc.role_id = tuir.role_id join t_user tu on tu.user_id = tuir.user_id
    WHERE trc.config_item_id = @config_item_id
    UNION
    SELECT tuc.[user_id],tu.user_name,tu.user_comment,tu.user_created_date,tu.pwd_lastmodify_date
    FROM t_user_config tuc join t_user tu on tu.user_id = tuc.user_id
    WHERE tuc.config_item_id = @config_item_id
    )
    insert #viewconfig_get
    SELECT [user_id],user_name,user_comment,user_created_date,pwd_lastmodify_date
    --_SELECT tu.user_id,tu.user_name,tu.user_comment,tu.user_created_date,tu.pwd_lastmodify_date
    FROM _t
    --FROM t_user tu JOIN _t ON tu.[user_id] = _t.user_id

    -------------------------------------------------------------------------------------------------


    -- 计算总帖数
    declare @sql nvarchar(max)
    set @sql ='select @total=count(*) from #viewconfig_get'+@condition
    exec sp_executesql @sql,N'@total int out',@totalCount output
    declare @columns varchar(300),@sort varchar(100)
    set @columns = 'user_id,user_name,user_comment,user_created_date,pwd_lastmodify_date'
    set @sort = ' user_id asc'

    -- 计算总页数
    set @totalPage=ceiling(1.*@totalCount/@pageSize)
    -- 处理@Page参数
    set @page=case when @page>@totalPage then @totalPage when @page<1 then 1 else @page end
    set @sql='with _t as(select top ('+cast(@page*@pageSize as varchar(20))+') row_number() over(order by '
    +@sort+') row_num,'+@columns+' from #viewconfig_get'+@condition+' order by '+@sort+') select '+@columns+' from _t where row_num>'+cast((@page-1)*@pageSize as varchar(10))

    exec(@sql)
    END

     

  • 相关阅读:
    linux-centos7安装mysql5.6
    CentOS Linux 7.2相关配置 以及环境搭建
    centos中查找占用磁盘大文件
    记录Redis在Windows下的安装与服务管理报错:Redis service failed to start.
    Spring cloud ----- 服务治理
    Spring Cloud技术分析
    Linux常用命令总结
    Java面试题总结(不断更新中)
    SpringBoot几种定时任务的实现方式
    Java 定时任务---Timer
  • 原文地址:https://www.cnblogs.com/babyfacer/p/2546771.html
Copyright © 2020-2023  润新知