PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 数据库 > SQL Server教程 > 正文

    Sql Server 分页存储过程

    作者:w634381967来源:B5教程网浏览:时间:2020-09-30 00:07:50我要评论
    导读:sql sever 通用分页存储过程复制代码 代码如下:CREATE PROCEDURE [dbo].[up_GetListByPage] ( @TableName VarChar(255), -- 表名...
    sql sever 通用分页存储过程
     
    复制代码 代码如下:
    CREATE PROCEDURE [dbo].[up_GetListByPage]
        (
            @TableName VarChar(255),        -- 表名
            @Fields VarChar(1000) = '*',    -- 需要返回的列
            @OrderField VarChar(255) = '',  -- 排序的字段名
            @IsAsc Bit = 0,                 -- 是否升序
            @StrWhere VarChar(1500) = '',   -- 查询条件 (注意: 不要加 WHERE)
            @PageSize Int = 10,             -- 每页数量
            @PageIndex Int = 1,             -- 当前页
            @IsDoCount Bit = 0              -- 是否查询记录总数
        )
    AS

        SET NOCOUNT ON
        
            DECLARE
                @strCountSQL NVARCHAR(2000),
                @strSQL NVARCHAR(4000),
                @strTmp VARCHAR(110),
                @strOrder VARCHAR(400)
                        
            IF(@IsDoCount != 0)
                BEGIN
                    --ListCount
                    IF @strWhere !=''
                        SET @strSQL = 'SELECT COUNT(1) AS Total FROM [' + @TableName + '] WHERE '+@strWhere
                    ELSE
                        SET @strSQL = 'SELECT COUNT(1) AS Total FROM [' + @TableName + ']'
                END
                --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
            ELSE
                BEGIN
                    --List
                    IF @IsAsc = 0
                        BEGIN
                            SET @strTmp = '<(SELECT MIN'
                            SET @strOrder = ' ORDER BY [' + @OrderField +'] DESC'
                            --如果@IsAsc是0,就执行降序,这句很重要
                        END
                    ELSE
                        BEGIN
                            SET @strTmp = '>(SELECT MAX'
                            SET @strOrder = ' ORDER BY [' + @OrderField +'] ASC'
                        END

                    IF @PageIndex = 1
                        BEGIN
                            IF @StrWhere != ''
                                SET @strSQL = 'SELECT TOP ' + str(@PageSize) +' '+@Fields+ ' FROM [' + @TableName + '] WHERE ' + @StrWhere + ' ' + @strOrder
                            ELSE
                                SET @strSQL = 'SELECT TOP ' + str(@PageSize) +' '+@Fields+ ' FROM ['+ @TableName + '] '+ @strOrder
                            --如果是第一页就执行以上代码,这样会加快执行速度
                        END
                    ELSE
                        BEGIN
                            --以下代码赋予了@strSQL以真正执行的SQL代码
                            SET @strSQL = 'SELECT TOP ' + str(@PageSize) +' '+@Fields+ ' FROM ['
                            + @TableName + '] WHERE [' + @OrderField + ']' + @strTmp + '(['+ @OrderField + ']) FROM (SELECT TOP ' + str((@PageIndex-1)*@PageSize) + ' ['+ @OrderField + '] FROM [' + @TableName + ']' + @strOrder + ') AS tblTmp)'+ @strOrder
                            IF @StrWhere != ''
                            SET @strSQL = 'SELECT TOP ' + str(@PageSize) +' '+@Fields+ ' FROM ['
                            + @TableName + '] WHERE [' + @OrderField + ']' + @strTmp + '(['
                            + @OrderField + ']) FROM (SELECT TOP ' + str((@PageIndex-1)*@PageSize) + ' ['
                            + @OrderField + '] FROM [' + @TableName + '] WHERE ' + @StrWhere + ' '
                            + @strOrder + ') AS tblTmp) AND ' + @StrWhere + ' ' + @strOrder
                        END
                END
                
                EXEC (@strSQL)
        SET NOCOUNT OFF

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-36-854-1.html
    相关热词搜索: 分页存储过程