Как получить список всех таблиц в двух разных базах данных

Я пытаюсь создать небольшой SQL script (в SQL Server Management Studio), чтобы получить список всех таблиц в двух разных базах данных. Цель состоит в том, чтобы выяснить, какие таблицы существуют в обеих базах данных и какие из них существуют только в одном из них.

Я нашел различные сценарии в SO, чтобы перечислить все таблицы одной базы данных, но пока мне не удалось получить список таблиц нескольких баз данных.

Итак: есть ли способ запросить SQL Server для всех таблиц в конкретной базе данных, например. SELECT * FROM ... WHERE databaseName='first_db', чтобы я мог присоединиться к этому с результатом для другой базы данных?

Ответ 1

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

UPDATE

Чтобы сравнить два списка, вы можете использовать FULL OUTER JOIN, который покажет вам таблицы, которые присутствуют в обеих базах данных, как а также те, которые присутствуют только в одном из них:

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)

Вы также можете добавить WHERE db1.TABLE_NAME IS NULL OR db2.TABLE_NAME IS NULL, чтобы увидеть только различия между базами данных.

Ответ 2

Насколько я знаю, вы можете запрашивать таблицы только для активной базы данных. Но вы можете сохранить их во временной таблице и присоединиться к результату:

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

Ответ 3

Просто для полноты, это запрос, который я наконец использовал (на основе ответа Андрея М):

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

Чтобы узнать, какие таблицы существуют в db2, но не в db1, замените LEFT OUTER JOIN на RIGHT OUTER JOIN.