zoukankan      html  css  js  c++  java
  • 再记一个SQL分页存储过程

    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
    GO

  • 相关阅读:
    spring cloud教程
    ideaaaaaaaaa
    Django
    Django 基础介绍
    Pychram
    python
    python
    python
    Python
    Python -- Scrapy 命令行工具(command line tools)
  • 原文地址:https://www.cnblogs.com/superfeeling/p/2705032.html
Copyright © 2011-2022 走看看