-- =============================================
-- 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
0 B
|👍
/👎
0 B
|👍
/👎