TSQL To Get All the Names of tables and Databases whose data have changed in last 24 Hours

-- =============================================
-- Author: Muhammad Jawad
-- Create date: 2/2/2017
-- Description: To Get All the Names of tables and Databases whose data have changed in last 24 Hours
-- =============================================
ALTER PROC UP_FindAllDatabaseHaveChanges
AS
    BEGIN

        DECLARE @loopStart INT= 1;
        DECLARE @looend INT;


        IF OBJECT_ID('tempdb..#AllDatabaseTables') IS NOT NULL
            BEGIN
                DROP TABLE #AllDatabaseTables;
            END;

        CREATE TABLE #AllDatabaseTables
            (
              ID INT IDENTITY(1, 1)
                     PRIMARY KEY ,
              ObjectID BIGINT ,
              TableName VARCHAR(500) ,
              DatabaseName VARCHAR(500)
            );

        DECLARE @temp TABLE
            (
              idx INT PRIMARY KEY
                      IDENTITY(1, 1) ,
              DBName VARCHAR(200)
            );
        INSERT  INTO @temp
                ( DBName
                )
                SELECT  '[' + name + ']'
                FROM    sys.databases
                WHERE   state = 0
                        AND name NOT IN ( 'tempdb', 'msdb', 'distribution',
                                          'master', 'model' )
                        AND name NOT LIKE '%ReportServer%'
                ORDER BY 1;


        SET @looend = ( SELECT  MAX(idx)
                        FROM    @temp
                      );

        WHILE @loopStart <= @looend
            BEGIN

                DECLARE @Database VARCHAR(200);
                SET @Database = ( SELECT    DBName
                                  FROM      @temp
                                  WHERE     idx = @loopStart
                                );

                DECLARE @SQL NVARCHAR(MAX)= ( 'Use ' + @Database
                                              + '

INSERT INTO #AllDatabaseTables
        ( ObjectID ,
          TableName ,
          DatabaseName
        )
SELECT  US.object_id ,
        SO.name AS TableName ,
        DB_NAME() AS DatabaseName --case when count(distinct US.object_id) > 0 then 1 else 0 end as IS_CHANGED
FROM    sys.dm_db_index_usage_stats US
        INNER JOIN sys.objects SO ON SO.object_id = US.object_id
WHERE   database_id = DB_ID(DB_NAME())
        AND last_user_update BETWEEN CAST(CAST(CAST(GETDATE() AS DATE) AS VARCHAR(100))
                                     + '' 00:00:00.000'' AS DATETIME)
                             AND     CAST(CAST(CAST(GETDATE() AS DATE) AS VARCHAR(100))
                                     + '' 23:59:59.998'' AS DATETIME); ' );

                EXEC sp_executesql @SQL;
                SET @loopStart = @loopStart + 1;
            END;

        SELECT  *
        FROM    #AllDatabaseTables;

    END;



Comments

Popular posts from this blog

To Get All the Names of tables and Databases their data have changed in last 24 Hours And Backup those databases

Apply paging in procedure