Istnieją dwie tabele w dwóch różnych bazach danych na różnych serwerach, muszę do nich dołączyć, aby wykonać kilka zapytań. Jakie mam opcje? Co powinienem zrobić?
102
Istnieją dwie tabele w dwóch różnych bazach danych na różnych serwerach, muszę do nich dołączyć, aby wykonać kilka zapytań. Jakie mam opcje? Co powinienem zrobić?
Odpowiedzi:
Będziesz musiał użyć,
sp_addlinkedserver
aby utworzyć łącze do serwera. Zobacz dokumentację referencyjną dotyczącą użytkowania. Po ustanowieniu połączenia z serwerem zapytanie zostanie utworzone w normalny sposób, po prostu poprzedzając nazwę bazy danych innym serwerem. TO ZNACZY:Po ustanowieniu połączenia możesz również użyć
OPENQUERY
do wykonania instrukcji SQL na serwerze zdalnym i przesłania tylko danych z powrotem do Ciebie. Może to być nieco szybsze i pozwoli zdalnemu serwerowi zoptymalizować zapytanie. Jeśli zbuforujesz dane w tabeli tymczasowej (lub w pamięci)DB1
w powyższym przykładzie, będziesz mógł wykonać zapytanie tak samo, jak dołączając do standardowej tabeli. Na przykład:Sprawdź dokumentację OPENQUERY, aby zobaczyć więcej przykładów. Powyższy przykład jest dość wymyślony. Zdecydowanie użyłbym pierwszej metody w tym konkretnym przykładzie, ale druga opcja
OPENQUERY
może zaoszczędzić trochę czasu i wydajności, jeśli użyjesz zapytania do odfiltrowania niektórych danych.źródło
Spróbuj tego:
źródło
Jeśli serwer połączony nie jest dozwolony przez twoją dba, możesz użyć OPENROWSET. Books Online zapewni potrzebną składnię.
źródło
Z praktycznego punktu widzenia przedsiębiorstwa, najlepszą praktyką jest utworzenie lustrzanej kopii tabeli bazy danych w bazie danych, a następnie po prostu zadanie / proc aktualizuje ją co godzinę o wartości delta.
źródło
Połączenie dwóch tabel najlepiej wykonać za pomocą DBMS, więc należy to zrobić w ten sposób. Możesz wykonać kopię lustrzaną mniejszej tabeli lub jej podzbioru w jednej z baz danych, a następnie dołączyć do nich. Można by się pokusić o zrobienie tego na serwerze ETL, takim jak informatica, ale myślę, że nie jest to zalecane, jeśli tabele są ogromne.
źródło
Jeśli opcja łącza do bazy danych nie jest dostępna, inną drogą, którą można wybrać, jest połączenie tabel za pośrednictwem ODBC z czymś, na przykład raportami MS Access lub Crystal, i wykonanie połączenia w tym miejscu.
źródło
Być może zakodowane na stałe nazwy baz danych nie zawsze są najlepszym podejściem w ramach zapytania SQL. Dlatego lepszym podejściem byłoby dodanie synonimów. Nie zawsze jest tak, że bazy danych mają tę samą nazwę w kilku środowiskach przejściowych. Mogą składać się z postfiksów, takich jak PROD, UAT, SIT, QA i tak dalej. Dlatego uważaj na zapytania zakodowane na stałe i nadaj im większą dynamikę.
Podejście nr 1: użyj synonimów, aby połączyć tabele między bazami danych na tym samym serwerze.
Podejście nr 2: Zbierz dane oddzielnie z każdej bazy danych i dołącz je do swojego kodu. Parametry połączenia z bazą danych mogą być częścią konfiguracji serwera aplikacji za pośrednictwem bazy danych lub pliku konfiguracyjnego.
źródło
Wypróbowałem ten kod poniżej i działa dobrze
źródło
Możesz spróbować następujących rzeczy:
źródło
w tym celu po prostu wykonaj poniższe zapytanie
Tam, gdzie napisałem nazwę bazy danych, musisz zdefiniować nazwę bazy danych. Jeśli jesteś w tej samej bazie danych, więc nie musisz definiować nazwy bazy danych, ale jeśli jesteś w innej bazie, musisz podać nazwę bazy danych jako ścieżkę lub wyświetli się błąd. Mam nadzieję, że ułatwiłem ci pracę
źródło
Podczas gdy miałem problemy z dołączeniem do tych dwóch tabel, udało mi się zrobić dokładnie to, co chciałem, otwierając obie zdalne bazy danych w tym samym czasie. MySQL 5.6 (php 7.1) i inne MySQL 5.1 (php 5.6)
Jeśli zobaczysz te dwa OK na ekranie, to obie bazy danych są otwarte i gotowe. Następnie możesz przystąpić do zadawania pytań.
Próbowałem wykonać kilka połączeń, ale ponieważ otworzyłem te dwie bazy danych, mogę przechodzić tam iz powrotem, wykonując zapytania, po prostu zmieniając połączenie
$mysqli1
lub$mysqli2
Pomogło mi, mam nadzieję, że pomogło ... Pozdrawiam
źródło