Search code examples
t-sqlcountsql-server-2014ssms-17

TSQL -- quick way to get a count across all tables


If database d1 has tables T1,T2,T3,T4 all with the field "Date1".

What is the best way to get a count of all records across all tables with a date older than 3 days ago?

I know one could do unions, I assume there is no nifty syntax that would omit all tables [like a 'parent' object in C++].

Here best may mean more efficient, or just a pleasing syntax in T-SQL.

This is for SSMS 17.7. Microsoft SQL Server 2014 (SP2)


Solution

  • Well, you're interested in a parent object, that would be a view, then. You can reuse it for a variety of queries. Alternatively, add more columns if you need them:

    CREATE VIEW parent AS
    SELECT Date1 FROM t1 UNION ALL
    SELECT Date1 FROM t2 UNION ALL
    SELECT Date1 FROM t3 UNION ALL
    SELECT Date1 FROM t4;
    

    And now, that can be queried in the way you want

    SELECT COUNT(*) FROM parent WHERE Date1 <= DATEADD(DAY, -3, GETDATE())