Каков наилучший подход к объединению 2 таблиц из разных баз данных? - PullRequest
5 голосов
/ 09 июня 2009

Как лучше всего объединить 2 таблицы из разных баз данных? В моей ситуации у меня есть база данных разработки, в которой есть постфикс, такой как _DEV, в то время как на производстве есть _PROD.

Проблема заключается в том, что если я присоединяюсь к этим двум таблицам, мне нужно указать полное имя базы данных, например, DB1_DEV.dbo.table1 INNER JOIN DB2_DEV.dbo.table100

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

Спасибо

Ответы [ 4 ]

10 голосов
/ 09 июня 2009

Вы можете использовать Синонимы , чтобы упростить ваши запросы. Например:

-- Create a synonym for the Product table in AdventureWorks.
USE tempdb;
GO
CREATE SYNONYM MyProduct
FOR AdventureWorks.Production.Product;
GO

-- Query the Product table by using the synonym.
USE tempdb;
GO
SELECT ProductID, Name FROM MyProduct WHERE ProductID < 5;
GO

РЕДАКТИРОВАТЬ: Вы можете определить синонимы для рассматриваемых таблиц. Используйте синоним вместо полного имени в любом месте, где вы запрашиваете таблицы.

При развертывании в производство все, что вам нужно сделать, это изменить синоним.

2 голосов
/ 09 июня 2009

В зависимости от вашей ситуации, SYNONYM может быть лучшим ответом или, возможно, VIEW.

Пример с ВИДОМ:

CREATE VIEW table1 AS SELECT * FROM DB1_DEV.dbo.table1

Позже, когда вы перейдете к PROD:

ALTER VIEW table1 AS SELECT * FROM DB1_PROD.dbo.table1

Как и в случае с SYNONYM, обновление волшебным образом исправляет все запросы, относящиеся просто к «table1».

Вот обсуждение, объясняющее различия между синонимами и представлениями:

Каковы плюсы / минусы использования синонима и представления?

1 голос
/ 09 июня 2009

Вот предложение: переместите базы данных Dev и Prod в разные кластеры серверов с тем же именем .

Если вы не можете или не хотите этого делать, я предлагаю вам найти способ параметризации имен баз данных в ваших запросах.

0 голосов
/ 20 января 2013

Вы должны хранить свое имя схемы где-нибудь в базе данных. Получите это имя схемы и создайте динамический sql. и используйте внутренний пакет Oracle Oracle DBMS_SQL.EXECUTE () для выполнения вашего запроса select.

Тогда, когда вы перейдете в PROD, вам не нужно ничего менять.

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