bdill icon

adm_AuditRecordCountsByDay_lst.sql

bdill | PRO | 10/30/19 03:47:09 PM UTC | 0 ⭐ | 6970 👁️ | Never ⏰ | []
T-SQL |

2.55 KB

|

None

|

0 👍

/

0 👎

-- =============================================
-- Auth:    bdill
-- Date:    2015-05-29
-- Desc:    Gets back record counts by day of audit table.  Requires @TableName to have a DATE[TIME] field called "TransDate"
--          Requires Utility.dbo.DimDates table to exist and be populated
-- Upd:     2017-02-21 (bdill) added @StartDate parameter to optionally limit the starting point of the query.
-- Upd:     2019-10-29 (bdill) added @SchemaName and @TransDateColName to make it less hard coded
-- =============================================
ALTER PROCEDURE [dbo].[adm_AuditRecordCountsByDay_lst]
      @DatabaseName VARCHAR(100) = 'MyDatabase_QA'
     , @TableName VARCHAR(100) = 'Users_Audit'
     , @SchemaName VARCHAR(100) = 'dbo'
     , @StartDate DATETIME = NULL  -- Null will use Min(TransDate)
     , @TransDateColNmae VARCHAR(100) = 'TransDate'
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @sql NVARCHAR(MAX)
     
    IF OBJECT_ID('tempdb..#tmpDailyCounts') IS NOT NULL
        DROP TABLE #tmpDailyCounts
    CREATE TABLE #tmpDailyCounts ( [Date] DATE NOT NULL, Records INT NULL)
 
    -- =============================================================================
    DECLARE @MinTransDate DATE
    DECLARE @MaxTransDate DATE
 
    SET @sql = N'SET @MinTransDate = ( SELECT MIN(' + @TransDateColNmae + ') FROM ' + @DatabaseName + '.' + @SchemaName + '.' + @TableName + ')'
    EXEC sys.sp_executesql @sql, N'@MinTransDate DATE OUT', @MinTransDate OUT
 
    SET @sql = N'SET @MaxTransDate = ( SELECT MAX(' + @TransDateColNmae + ') FROM ' + @DatabaseName + '.' + @SchemaName + '.' + @TableName + ')'
    EXEC sys.sp_executesql @sql, N'@MaxTransDate DATE OUT', @MaxTransDate OUT
    
    DECLARE @CurrDate DATE = ISNULL(@StartDate, @MinTransDate)
    DECLARE @CurrDate_Plus1 DATE = DATEADD(DAY, 1, @CurrDate)
    -- =============================================================================
 
    WHILE @CurrDate <= @MaxTransDate
    BEGIN
        SET @sql = N'INSERT INTO #tmpDailyCounts ( Date, Records ) 
        SELECT CONVERT(DATE, ''' + CONVERT(VARCHAR(20), @CurrDate) + ''')
            , COUNT(*) 
        FROM ' + @DatabaseName + '.' + @SchemaName + '.' + @TableName + ' WITH (NOLOCK) 
        WHERE ' + @TransDateColNmae + ' >= ''' + CONVERT(VARCHAR(20), @CurrDate) + ''' AND ' + @TransDateColNmae + ' < DATEADD(DAY, 1, ''' + CONVERT(VARCHAR(20), @CurrDate) + ''')'
 
        EXEC sys.sp_executesql @sql
 
        SET @CurrDate = DATEADD(DAY, 1, @CurrDate)
        SET @CurrDate_Plus1 = DATEADD(DAY, 1, @CurrDate)
        PRINT @CurrDate
    END
 
    SELECT TDC.Date, DD.WeekdayName AS WkDay, TDC.Records
    FROM #tmpDailyCounts AS TDC
    JOIN Utility.dbo.DimDates AS DD ON DD.Date = TDC.Date
END

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎