Как получить список всех таблиц в двух разных базах данных - PullRequest
13 голосов
/ 04 июля 2011

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

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

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

Ответы [ 3 ]

20 голосов
/ 04 июля 2011
SELECT * FROM <i>database1</i>.INFORMATION_SCHEMA.TABLES
UNION ALL
SELECT * FROM <i>database2</i>.INFORMATION_SCHEMA.TABLES

ОБНОВЛЕНИЕ

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

SELECT *
FROM <i>database1</i>.INFORMATION_SCHEMA.TABLES db1
  FULL JOIN <i>database2</i>.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 голосов
/ 04 июля 2011

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

use db1
insert #TableList select (...) from sys.tables
use db2
insert #TableList2 select (...) from sys.tables
select * from #TableList tl1 join Tablelist2 tl2 on ...
1 голос
/ 04 июля 2011

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

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...