微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

 


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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐