Подтвердить что ты не робот

Запрос нескольких баз данных на одном сервере

Я ищу способ решить следующую ситуацию:

  • У нас есть сервер базы данных с несколькими базами данных (все они имеют одну и ту же схему, разные данные).

  • Мы ищем способ запроса по всем базам данных (и для этого его легко настроить, так как в любое время можно добавить больше баз данных). Этот доступ к данным должен быть в режиме реального времени.

Скажем, в качестве примера у вас есть приложение, которое вставляет заказы - каждое приложение имеет свой собственный БД и т.д. То, что мы тогда ищем, - это эффективный способ для одного приложения, чтобы затем получить доступ к информации о заказе во всех других базах данных чтобы запросить его и впоследствии принять меры.

Мои поисковые запросы до настоящего времени не показали очень многого, но я думаю, что я могу просто упустить соответствующие ключевые слова, чтобы найти правильную информацию...

4b9b3361

Ответ 1

Это не будет самым чистым решением, но вы можете определить представление в "Главной базе данных" (если ваши отдельные базы данных не будут оставаться постоянными), которые включают данные из отдельных баз данных и позволяют вам выполнять запросы в одном источнике.

Например...

CREATE VIEW vCombinedRecords AS
SELECT * FROM DB1.dbo.MyTable
UNION ALL
SELECT * FROM DB2.dbo.MyTable

Что позволяет делать...

SELECT * FROM vCombinedRecords WHERE....

Когда ваши базы данных меняются, вы просто обновляете определение представления, чтобы включить новые таблицы.

Ответ 2

Вы должны указать имя базы данных перед любым объектом базы данных.

Единая база данных:

SELECT * FROM [dbo].[myTable]

Несколько баз данных:

SELECT * FROM [DB01].[dbo].[myTable]
UNION ALL
SELECT * FROM [DB02].[dbo].[myTable]
UNION ALL
SELECT * FROM [DB03].[dbo].[myTable]

Ответ 3

Вы можете построить объединение динамически:

select name from sys.databases

а затем проверьте, есть ли в базе данных таблица:

select name from [dbname_from_above].sys.tables where name = 'YourTable'

Это дает вам все базы данных для объединения. Вы можете создать клиентскую часть запроса или динамический SQL.