I need help for one of my cases.
- Lets say that I have one table with only one column named CustomerID with 1500 records.
- The CustomerID table is loaded in DB 2 times per day – 10am and 10pm
- I want to compare the CustomerID table in the morning (10am) with the one in (10pm)
SELECT COUNT(*) from CustomerID -- 10 AM / 1500 records.
SELECT COUNT(*) from CustomerID -- 10 PM / 1510 records.
I want to check for these 10 extra records – only the count, nothing more.
The main idea is to keep track on the table and if there are no new records in 10 PM – to tell the responsible person that the table is “broken”, because the table should be a growing count number with every load.
Thanks!
Advertisement
Answer
I did this recently for multiple DBs and table, but can show you how to do it for just one table.
Instructions:
Create a stored procedure using the query below (update w/ your db and table name)
*You will need to create the table before being able to run this
Put this on a job schedule for 10a and 10p
Check daily or create a visualization/dashboard using this new table as a data source to display whether everything was loaded as it should have been
Query:
use [YOUR DB NAME]
go
create procedure [YOURSCHEMA.YOUR_NEW_AUDIT_TABLE_NAME] as
insert into [TABLE_NAME_YOU_WANT_TO_CREATE_FOR_TRACKING]
select schema_name(schema_id) as [schemaname],
[tables].name as [tablename],
sum([partitions].[rows]) as [totalrowcount],
getdate() as date_checked
from sys.tables as [tables]
join sys.partitions as [partitions] on [tables].[object_id] = [partitions].[object_id] and [partitions].index_id in ( 0, 1 )
where [tables].name = '[TABLE_NAME_YOU_WANT_TRACKED]'
group by schema_name(schema_id), [tables].name;
go;