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

更新时间:2017-03-16    来源:Mssql    手机版     字体:

【www.bbyears.com--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了

本文来源:http://www.bbyears.com/shujuku/31202.html

猜你感兴趣

热门标签

更多>>

本类排行