Есть две таблицы в двух разных базах данных на разных серверах, мне нужно объединить их, чтобы сделать несколько запросов. Какие у меня есть варианты? Что я должен делать?
102
Есть две таблицы в двух разных базах данных на разных серверах, мне нужно объединить их, чтобы сделать несколько запросов. Какие у меня есть варианты? Что я должен делать?
Ответы:
Вам нужно будет использовать
sp_addlinkedserver
для создания ссылки на сервер. См. Справочную документацию по использованию. Как только связь с сервером будет установлена, вы создадите запрос как обычно, просто добавив к имени базы данных префикс другого сервера. IE:Как только связь установлена, вы также можете использовать ее
OPENQUERY
для выполнения инструкции SQL на удаленном сервере и передачи вам обратно только данных. Это может быть немного быстрее и позволит удаленному серверу оптимизировать ваш запрос. Если вы кэшируете данные во временной таблице (или в памяти)DB1
в приведенном выше примере, вы сможете запросить их так же, как присоединение к стандартной таблице. Например:Ознакомьтесь с документацией по OPENQUERY, чтобы увидеть еще несколько примеров. Приведенный выше пример довольно надуманный. Я бы определенно использовал первый метод в этом конкретном примере, но использование второго варианта
OPENQUERY
может сэкономить время и производительность, если вы используете запрос для фильтрации некоторых данных.источник
Попробуй это:
источник
Если связанный сервер не разрешен вашей dba, вы можете использовать OPENROWSET. Электронная документация предоставит вам необходимый синтаксис.
источник
С практической точки зрения предприятия лучше всего сделать зеркальную копию таблицы базы данных в вашей базе данных, а затем просто сделать так, чтобы задача / процесс обновляла ее каждый час с дельтой.
источник
Соединение двух таблиц лучше всего выполнять с помощью СУБД, поэтому это и нужно делать. Вы можете отразить меньшую таблицу или ее подмножество в одной из баз данных, а затем присоединиться к ним. У кого-то может возникнуть соблазн сделать это на сервере ETL, таком как informatica, но я думаю, это не рекомендуется, если таблицы огромны.
источник
Если опция связи с базой данных недоступна, вы можете выбрать другой путь - связать таблицы через ODBC с чем-то вроде отчетов MS Access или Crystal и выполнить там соединение.
источник
Возможно, жестко запрограммированные имена баз данных не всегда лучший подход в рамках SQL-запроса. Таким образом, добавление синонимов было бы лучшим подходом. Не всегда базы данных имеют одно и то же имя в нескольких промежуточных средах. Они могут состоять из таких постфиксов, как PROD, UAT, SIT, QA и т. Д. Так что помните о жестко запрограммированных запросах и сделайте их более динамичными.
Подход №1: используйте синонимы для связи таблиц между базами данных на одном сервере.
Подход № 2: Собирайте данные отдельно из каждой базы данных и присоединяйте их в своем коде. Строки подключения к базе данных могут быть частью конфигурации сервера приложений через базу данных или файл конфигурации.
источник
Я пробовал этот код ниже, и он отлично работает
источник
Вы можете попробовать следующее:
источник
для этого просто следуйте нижеприведенному запросу
Там, где я написал имя базы данных, вы должны указать имя базы данных. Если вы находитесь в той же базе данных, поэтому вам не нужно определять имя базы данных, но если вы находитесь в другой базе данных, вы должны указать имя базы данных в качестве пути, иначе она покажет вам ошибку. Надеюсь, я облегчил твою работу
источник
Хотя у меня возникли проблемы с объединением этих двух таблиц, я сделал именно то, что хотел, открыв обе удаленные базы данных одновременно. MySQL 5.6 (php 7.1) и другие MySQL 5.1 (php 5.6)
Если вы получили эти два сообщения ОК на экране, значит, обе базы данных открыты и готовы. Затем вы можете приступить к выполнению своих запросов.
Я пытался сделать несколько соединений, но поскольку у меня открыты эти две БД, я могу перемещаться вперед и назад, выполняя запросы, просто изменяя соединение
$mysqli1
или$mysqli2
У меня сработало, надеюсь, поможет ... Ура
источник