Comment get une list de toutes les tables dans deux bases de données différentes

J'essaie de créer un petit script SQL (dans SQL Server Management Studio) pour get une list de toutes les tables dans deux bases de données différentes. L'objective est de découvrir quelles tables existent dans les deux bases de données et lesquelles n'existent que dans l'une d'entre elles.

J'ai trouvé divers scripts sur SO pour listr toutes les tables d' une database, mais jusqu'ici je n'ai pas pu get une list de tables de plusieurs bases de données.

Donc: existe-t-il un moyen d'interroger SQL Server pour toutes les tables d'une database spécifique, par exemple SELECT * FROM ... WHERE databaseName='first_db' afin que je puisse joindre ceci avec le résultat pour une autre database?

     SELECT * FROM database1 .INFORMATION_SCHEMA.TABLES UNION ALL SELECT * FROM database2 .INFORMATION_SCHEMA.TABLES 

    METTRE À JOUR

    Afin de comparer les deux lists, vous pouvez utiliser FULL OUTER JOIN , qui vous montrera les tables qui sont présentes dans les deux bases de données ainsi que celles qui ne sont présentes que dans l'une d'entre elles:

     SELECT * FROM database1 .INFORMATION_SCHEMA.TABLES db1 FULL JOIN database2 .INFORMATION_SCHEMA.TABLES db2 ON db1.TABLE_NAME = db2.TABLE_NAME ORDER BY COALESCE(db1.TABLE_NAME, db2.TABLE_NAME) 

    Vous pouvez également append WHERE db1.TABLE_NAME IS NULL OR db2.TABLE_NAME IS NULL pour afficher uniquement les différences entre les bases de données.

    Pour autant que je sache, vous pouvez uniquement interroger des tables pour la database active. Mais vous pouvez les stocker dans une table temporaire et join le résultat:

     use db1 insert #TableList select (...) from sys.tables use db2 insert #TableList2 select (...) from sys.tables select * from #TableList tl1 join Tablelist2 tl2 on ... 

    Juste pour l'exhaustivité, voici la requête que j'ai finalement utilisée (basée sur la réponse d'Andriy M):

     SELECT * FROM DB1.INFORMATION_SCHEMA.Tables db1 LEFT OUTER JOIN DB2.INFORMATION_SCHEMA.Tables db2 ON db1.TABLE_NAME = db2.TABLE_NAME ORDER BY db1.TABLE_NAME 

    Pour savoir quelles tables existent dans db2, mais pas dans db1, remplacez LEFT OUTER JOIN par un RIGHT OUTER JOIN .