mssql 存储过程分页(同时返回总页数)

mssql 存储过程分页(同时返回总页数)

没有MySql般方便的limit分页,在MSSQL中需要分页查询数据的话,就只好写存储过程了。。。

not in方式的分页性能差,创建变量表的方式相对来说,应该要好些。(MSSQL2000)

之前都是获取分页数据、获取数据总数分开写,也就是做两次查询。

某天突然想了想,干脆把这两步操作都写到分页查询里,返回分页数据的同时,把数据总数也返回。

这么做有什么好处呢?

1、减少一次数据库教程请求。

2、查询条件很多时,就只需拼一次SQL了。

3、方便维护

4、。。。。。。

 

这几个理由,足够了,那么就实践吧。

 

-- =============================================
-- Author:        Henson
-- Create date: 2011-06-01
-- Description:    根据查询条件返回符合的条件的数据总数及当页数据
-- =============================================
CREATE PROCEDURE [dbo].[ST_GetPagedData]
    @MbCd varchar(12),--会员编号
    @MbName varchar(20),--会员姓名
    @PageSize int,--每页显示的记录数
    @CurrPage int, --当前页索引
    @RecordCount int output --总记录数(输出参数)
AS
BEGIN
    Declare @strSql varchar(4000)
    Declare @strWhere varchar(1000)
    --根据参数生成Where条件
    Set @strWhere = ''
    If (isnull(@MbCd,'') != '')
    Begin
        Set @strWhere = @strWhere + ' And MB_CD='''+@MbCd+''''
    End
    If (isnull(@MbName,'') != '')
    Begin
        Set @strWhere = @strWhere + ' And Name like ''%'+@MbName+'%'''
    End
   
   
    --获取记录总数
    Declare @strCountSql nvarchar(1000)
    Set @strCountSql = 'Select @RecordCount=count(*) From M_Account a  Where 1=1 '+@strWhere
    exec sp_executesql @strCountSql, N'@RecordCount int output',@RecordCount output
    --print (@strCountSql)
   
    --获取数据
   
    declare @topIdNum int ,@delNum int
    set @topIdNum = @PageSize*@CurrPage
    set @delNum = (@CurrPage-1)*@PageSize
   
    set @strSql = '
        DECLARE @temptb table
        (
            uid int identity(1,1),  
            Mb_Cd varchar(12)
        )
       
        Insert Into @temptb(Mb_Cd)
        Select Top '+ cast( @topIdNum as varchar(10) )+' a.Mb_Cd,
        From M_Account a
        Where 1=1 '+@strWhere+N'

        delete from @temptb where uid<='+ cast( @delNum as varchar(10) )+N'

        Select *
        From M_Account a
            Inner Join @temptb b On a.Mb_Cd=b.Mb_Cd
        '
       
    exec (@strSql)
   
END

 

嗯,就是这样。

然后在调用时,将输出参数的值,也一并获取,就OK了

时间: 2024-12-21 22:29:02

mssql 存储过程分页(同时返回总页数)的相关文章

高效mssql存储过程分页代码(1/6)

在一般的小数据分页是我们就用简单的分页功能就可以了,但如果上百万级数据分页了,那么我就不得不考虑到高效mssql存储过程分页代码哦. declare @TotalCount int declare @TotalPageCount int exec P_viewPage_A 'type1','*','id','','id asc',1,0,4,3,@TotalCount output,@TotalPageCount output select * from type1 Create PROC P_

swftools-java 中使用FlexPaper分页加载获得总页数

问题描述 java 中使用FlexPaper分页加载获得总页数 java项目中用FlexPaper + swfTools 加载pdf格式的文档 分页时执行: C:SWFToolspdf2swf.exe Paper.pdf -o Paper%.swf -f -T 9 -t -s storeallcharacters FlexPaper控件配置加载SwfFile的地方,采用: {filename[*,padding],total pages} 但怎样获得总页数(total pages)? 解决方案

ASP调用带参数的MSSQL存储过程,并返回临时表记录集

前些天,阿里西西web团队(Alixixi.com)在开发一个系统平台时,需要通过存储过程调用多个表的几个字段,合并到一个临时表中,并进行排序返回给ASP调用. 下面,我把经验分享出来: 1.存储过程部分: 以下是存储过程部分:CREATE PROCEDURE [dbo].[alixixi] @sNum int, @sOrder varchar(20)  AS SET nocount on create table #btable (id int,channelid int,classid in

Codeigniter框架实现获取分页数据和总条数的方法_php实例

本文实例讲述了Codeigniter框架实现获取分页数据和总条数的方法.分享给大家供大家参考.具体实现方法如下: 一般在数据分页的时候需要获取当前页的数据和总条数,一般人是在model中封装两个函数分别获取当前页的数据和数据总条数,业务逻辑类似,感觉有点冗余,可以封装在一起 复制代码 代码如下: /** * 获取分页数据及总条数 * @param string @tablename 表名 * @param mixed $where 条件 * @param int $limit 每页条数 * @p

Codeigniter框架实现获取分页数据和总条数

 代码如下 复制代码     /**      * 获取分页数据及总条数      * @param string @tablename 表名      * @param mixed $where 条件      * @param int $limit 每页条数      * @param int $offset 当前页      *      * @link http://www.111cnn.net  代码如下 复制代码      */     public function get_pag

【求助】.net开发,怎么获得打印机打印的总页数?

问题描述 我们打算开发的软件需求是:用户通过我们的软件进行打印,软件需要获得用户打印的总页数.打印文本的格式是pdf(所以PrintDocument这个类不能使用了)打印设置调用的是Adobereader现有的API的dialog,但是Adobe但是无法获得用户设置打印的页数和打印的份数.voidprintWithDialog()<--这个函数调用后打印设置出来了,但因为这个函数没有返回值,所以无法知道用户打印了多少份,也无法知道用户打印的范围从第几页到第几页.所以我们打算通过连接打印机来获取打

后台分页的页码安全(超过总页数,页码为非数字)检查问题

问题描述 DB那边已经能抽到对应page的列表了,但是对page值的安全问题有点困惑:1.总页数和请求过来的page值的比较(action和service层都是单例,用全局变量定义个pager肯定违反了单例),这样就无法比较请求过来时的page和总页数了<-----我考虑到别人捣乱的情况,直接在地址栏输入过大的page,不知道怎么解决2.用struts接收参数page,如果请求中的参数被别人在地址栏弄个字符串,struts接收参数,因为类型不是Integer,直接报错感谢各位大神回答 解决方案

如何获取jasperReport报表总页数?

问题描述 问题是这样的,报表时用iReport软件制作好,然后部署到jasperserver上运行,我可以再浏览器上通过连接的方式访问服务器返回的报表页,可以在链接后面带参数来查询报表的某些数据,但是jasperserver只是返回相应的报表页,不返回相关参数信息,也不知道如何获取,现在唯一的问题是返回的报表页无法获取到总页数,网上很多都是关于web如何制作报表的,我需要从已配置好的报表那儿获取到总页数信息,请教各位有没有方法? 解决方案

在Powerpoint幻灯片里显示总页数

在演示Powerpoint的时候,通常都想着讲稿的内容怎样说,就忘记了PPT幻灯片的总页数,特别是页数多的时候,花在前面部分幻灯片的时间多了,后面的内容就不够时间讲了.如果可以在Powerpoint幻灯片里显示总页数就好了,但是Powerpoint2003并不能够像它的两个"兄弟"Word与Excel那样直接通过在页眉或者页角里插入总页数的方法来给所有幻灯片都加上页数,那怎么办呢? 其实我们可以在幻灯片母版上动动手脚就可以实现这一功能了. 第一步:打开做好的Powerpoint2003