超强的分页存储过程 可用来各种查询

 


CREATE PROCEDURE [dbo].[GetPagingList](
@Table nvarchar(1000),          --表名
@Field nvarchar(1000) = '*',        --读取字段
@Where  nvarchar(500) = NULL,       --Where条件
@GroupBy nvarchar(500) = NULL,      --分组
@OrderBy nvarchar(500)= NULL,       --排序字段
@PrimaryKeyField nvarchar(50),      --主键必需 
@PageNumber int = 1,            --开始页码
@PageSize int = 10,             --页大小
@IsCount bit = 0            --是否返回记录总数
)
AS
BEGIN
    ------------------------------------------------------------------------------------------------
    DECLARE @strWhere nvarchar(500)                     --Where 条件
    IF @Where IS NOT NULL AND @Where != ''              --Where 条件
    BEGIN
        SET @strWhere = ' WHERE ' + @Where + ' '
    END
    ELSE
    BEGIN
        SET @strWhere = ''
    END
    ----------------------------------------------------------------------------------------------------
    DECLARE @strGroupBy nvarchar(500)                   --GroupBy 条件
    IF @GroupBy IS NOT NULL AND @GroupBy != ''          --GroupBy 条件
    BEGIN
        SET @strGroupBy = ' GROUP BY ' + @GroupBy + ' '
    END
    ELSE
    BEGIN
        SET @strGroupBy = ''
    END
    ----------------------------------------------------------------------------------------------------
    DECLARE @strOrderBy nvarchar(500)                   --OrderBy 条件
    IF @OrderBy IS NULL OR @OrderBy = ''                --OrderBy 条件
    BEGIN
        SET @strOrderBy = ' ORDER BY ' + @PrimaryKeyField + ' DESC'
    END
    ELSE
    BEGIN
        SET @strOrderBy = ' ORDER BY ' + @OrderBy
    END
    ----------------------------------------------------------------------------------------------------
    DECLARE @strSql nvarchar(max)   --Sql 语句
    --计算总行数
    IF @IsCount = 1
    BEGIN
        SET @strSql= 'SELECT  Count (*) AS RecordCount FROM ' + @Table + @strWhere + @strGroupBy
        EXEC sp_executesql @strSql
        RETURN 
    END 
    ----------------------------------------------------------------------------------------------------
    IF @PageNumber < 1                                  --第一页提高性能
    BEGIN   
        SET @PageNumber = 1
    END

    IF @PageNumber = 1                          
    BEGIN
        SET @strSql = 'SELECT TOP ' + str(@PageSize) +  ' ' + @Field + ' FROM ' + @Table + 
                       @strWhere + @strGroupBy + @strOrderBy
        EXEC sp_executesql @strSql
        RETURN
    END
    ----------------------------------------------------------------------------------------------------
    --根据 SqlServer 2005 帮助得到下面的语句   
    DECLARE @STARTID nvarchar(50)
    DECLARE @ENDID nvarchar(50)
    SET @STARTID = convert(nvarchar(50),(@PageNumber - 1) * @PageSize + 1)
    SET @ENDID = convert(nvarchar(50),@PageNumber * @PageSize)
    SET @strSql = 'WITH MYTABLE AS (SELECT ROW_NUMBER() OVER (' + @strOrderBy + ')
                   AS RowNumber,' + @Field + ' FROM '+ @Table +  @strWhere + @strGroupBy + ') 
                   SELECT * FROM MYTABLE 
                   WHERE RowNumber BETWEEN ' + @STARTID + ' AND ' + @ENDID
    EXEC sp_executesql @strSql
    --------------------------------------------------------------------------------------------------
END

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值