List tables in all databases in SQL Server instance

Article for: Teradata MySQL MariaDB

Query below lists all tables from all databases on SQL Server instance

Query

declare @sql nvarchar(max);

select @sql = 
    (select ' UNION ALL
        SELECT ' +  + quotename(name,'''') + ' as database_name,
               s.name COLLATE DATABASE_DEFAULT
                    AS schema_name,
               t.name COLLATE DATABASE_DEFAULT as table_name 
               FROM '+ quotename(name) + '.sys.tables t
               JOIN '+ quotename(name) + '.sys.schemas s
                    on s.schema_id = t.schema_id'
    from sys.databases 
    where state=0
    order by [name] for xml path(''), type).value('.', 'nvarchar(max)');

set @sql = stuff(@sql, 1, 12, '') + ' order by database_name, 
                                               schema_name,
                                               table_name';

execute (@sql);

Columns

  • database_name - name of the database within schema resides
  • schema_name - name of the schema
  • table_name - name of the table

Rows

  • One row represents one table in database
  • Scope of rows: all tables from all schemas and all databases on SQL Server instance
  • Ordered by database name, schema name, table name

Sample results

You could also get this

Get this interactive HTML data dictionary in minutes with Dataedo.

See live HTML data dictionary sample

Try for free