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;
-- 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
Post a Comment