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

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

概述  CREATE PROCEDURE [dbo].[GetPagingList]( @Table nvarchar(1000),          --表名 @Field nvarchar(1000) = '*',        --读取字段 @Where  nvarchar(500) = NULL,       --Where条件 @GroupBy nvarchar(500) = NULL,    


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

总结

以上是内存溢出为你收集整理的超强的分页存储过程 可用来各种查询全部内容,希望文章能够帮你解决超强的分页存储过程 可用来各种查询所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1179155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存