Запрос нескольких баз данных на одном сервере
Я ищу способ решить следующую ситуацию:
-
У нас есть сервер базы данных с несколькими базами данных (все они имеют одну и ту же схему, разные данные).
-
Мы ищем способ запроса по всем базам данных (и для этого его легко настроить, так как в любое время можно добавить больше баз данных). Этот доступ к данным должен быть в режиме реального времени.
Скажем, в качестве примера у вас есть приложение, которое вставляет заказы - каждое приложение имеет свой собственный БД и т.д. То, что мы тогда ищем, - это эффективный способ для одного приложения, чтобы затем получить доступ к информации о заказе во всех других базах данных чтобы запросить его и впоследствии принять меры.
Мои поисковые запросы до настоящего времени не показали очень многого, но я думаю, что я могу просто упустить соответствующие ключевые слова, чтобы найти правильную информацию...
Ответы
Ответ 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.