zoukankan      html  css  js  c++  java
  • 分页存储过程优化同时返回数据总数 up

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

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


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

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

    这么做有什么好处呢?

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

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

      3、方便维护

      4、。。。。。。



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

     

    -- =============================================
    --
    Author: Henson
    --
    Create date: 2011-06-01
    --
    Description: 根据查询条件返回符合的条件的数据总数及当页数据
    --
    =============================================
    CREATEPROCEDURE[dbo].[ST_GetPagedData]
    @MbCdvarchar(12),--会员编号
    @MbNamevarchar(20),--会员姓名
    @PageSizeint,--每页显示的记录数
    @CurrPageint, --当前页索引
    @RecordCountint output --总记录数(输出参数)
    AS
    BEGIN
    Declare@strSqlvarchar(4000)
    Declare@strWherevarchar(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@strCountSqlnvarchar(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@topIdNumint ,@delNumint
    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( @topIdNumasvarchar(10) )+' a.Mb_Cd,
    From M_Account a
    Where 1=1
    '+@strWhere+N'

    delete from @temptb where uid<=
    '+cast( @delNumasvarchar(10) )+N'

    Select *
    From M_Account a
    Inner Join @temptb b On a.Mb_Cd=b.Mb_Cd
    '

    exec (@strSql)

    END

    嗯,就是这样。

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

    (如有不妥或可以完善的地方,还请指出,不胜感激!!!)

  • 相关阅读:
    IOC Unity的配置问题
    编译时常量与运行时常量
    Revit二次开发,将插件按钮(Ribbon)变灰或者隐藏
    C#类库读取App.config配置文件
    winform固定窗体大小
    Revit二次开发,获取模型版本信息
    JavaScript:文件保存自動下載函數:Save和SaveAs
    JavaScript:年月日時分秒設置
    JavaScript:字符串の空格刪減和字符刪減功能
    JavaScript:獲取數據の類型
  • 原文地址:https://www.cnblogs.com/uphenson/p/2116344.html
Copyright © 2011-2022 走看看