Jak mogę wybrać dane w tym samym zapytaniu z dwóch różnych baz danych, które znajdują się na dwóch różnych serwerach w SQL Server?
sql
sql-server
Eric
źródło
źródło
Odpowiedzi:
To, czego szukasz, to połączone serwery. Możesz się do nich dostać w SSMS z następującej lokalizacji w drzewie Eksploratora obiektów:
Server Objects-->Linked Servers
lub możesz użyć sp_addlinkedserver .
Musisz tylko skonfigurować jeden. Gdy to zrobisz, możesz wywołać tabelę na innym serwerze w następujący sposób:
Pamiętaj, że właściciel nie zawsze jest
dbo
taki, więc pamiętaj, aby zastąpić go dowolnym używanym schematem.źródło
[OtherServerName].[OtherDB]..[OtherTable]
. Najlepiej jednak dołączyć, jeśli jest znany.Możesz to zrobić za pomocą Połączonego serwera.
Zwykle połączone serwery są skonfigurowane tak, aby umożliwić aparatowi bazy danych wykonanie instrukcji Transact-SQL, która zawiera tabele w innej instancji SQL Server lub innym produkcie bazodanowym, takim jak Oracle. Wiele typów źródeł danych OLE DB można skonfigurować jako połączone serwery, w tym Microsoft Access i Excel.
Połączone serwery oferują następujące zalety:
Przeczytaj więcej o połączonych serwerach .
Wykonaj następujące kroki, aby utworzyć serwer połączony:
Obiekty serwera -> Połączone serwery -> Nowy połączony serwer
Podaj nazwę zdalnego serwera.
Wybierz typ zdalnego serwera (SQL Server lub inny).
Wybierz Bezpieczeństwo -> Wykonaj przy użyciu tego kontekstu bezpieczeństwa i podaj login i hasło do zdalnego serwera.
Kliknij OK i gotowe!
Oto prosty samouczek dotyczący tworzenia połączonego serwera.
LUB
Możesz dodać połączony serwer za pomocą zapytania.
Składnia:
Przeczytaj więcej o sp_addlinkedserver .
Połączony serwer musisz utworzyć tylko raz . Po utworzeniu połączonego serwera możemy wykonać kwerendę w następujący sposób:
źródło
Możesz także spojrzeć na korzystanie z połączonych serwerów. Połączone serwery mogą być również innego rodzaju źródłami danych, takimi jak platformy DB2. Jest to jedna metoda próby uzyskania dostępu do bazy danych DB2 z wywołania SQL Server TSQL lub Sproc ...
źródło
Could not find server '88.208.229.164' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
Zapytanie w 2 różnych bazach danych jest zapytaniem rozproszonym. Oto lista niektórych technik oraz plusy i minusy:
źródło
Spróbuj tego:
źródło
To są dobre odpowiedzi, ale tej brakuje i ma ona swoje potężne zastosowania. Być może nie pasuje do tego, czego chciał PO, ale pytanie było niejasne i czuję, że inni mogą tu znaleźć drogę. Zasadniczo możesz użyć 1 okna do jednoczesnego uruchomienia zapytania do wielu serwerów, oto jak:
W SSMS otwórz Zarejestrowane serwery i utwórz nową grupę serwerów w Lokalne grupy serwerów .
W ramach tej grupy utwórz rejestrację nowego serwera dla każdego serwera, do którego chcesz wysłać zapytanie. Jeśli nazwy DB są różne, ustaw wartość domyślną dla każdej właściwości.
Teraz wróć do grupy utworzonej w pierwszym kroku, kliknij prawym przyciskiem myszy i wybierz Nowe zapytanie. Otworzy się nowe okno zapytania, a każde uruchomione zapytanie zostanie wykonane na każdym serwerze w grupie. Wyniki są prezentowane w jednym zestawie danych z dodatkową nazwą kolumny wskazującą, z którego serwera pochodzi rekord. Jeśli użyjesz paska stanu, zauważysz, że nazwa serwera została zastąpiona wielokrotnością .
źródło
Miałem ten sam problem z połączeniem SQL_server 2008 z SQL_server 2016 hostowanym na zdalnym serwerze. Inne odpowiedzi nie były dla mnie proste. Piszę tutaj moje poprawione rozwiązanie, ponieważ myślę, że może być przydatne dla kogoś innego.
Rozszerzona odpowiedź dla zdalnych połączeń IP db:
Krok 1: połącz serwery
...gdzie
SRV_NAME
jest wymyślona nazwa. Użyjemy go, aby odnieść się do zdalnego serwera z naszych zapytań.aaa.bbb.ccc.ddd
to adres IP zdalnego serwera hostującego twoją bazę danych SQLserver.Krok 2: Uruchom swoje zapytania Na przykład:
...i to wszystko!
Szczegóły składni: sp_addlinkedserver i sp_addlinkedsrvlogin
źródło
Utworzono definicję serwera połączonego na jednym serwerze do drugiego (musisz to zrobić SA), a następnie po prostu odnieś się do nich za pomocą 4-częściowej nazwy (patrz BOL).
źródło
Serwer 2008:
Będąc w SSMS podłączonym do server1.DB1 i spróbuj:
jak zauważyli inni, jeśli to nie działa, to dlatego, że serwer nie jest połączony.
Dostaję błąd:
Aby dodać serwer:
odniesienie: Aby dodać serwer za pomocą sp_addlinkedserver Link: [1]: Aby dodać serwer za pomocą sp_addlinkedserver
Aby zobaczyć, co jest w twoim sys.servers, po prostu zapytaj:
źródło
źródło
Jak @ Super9 powiedział o OPENDATASOURCE przy użyciu uwierzytelniania SQL Server z dostawcą danych SQLOLEDB . Właśnie zamieszczam tutaj fragment kodu dla jednej tabeli w bieżącej bazie danych serwera, w której działa kod, a drugiej na innym serwerze „192.166.41.123”
źródło
więc powinno pójść tak -
źródło
Wiem, że to stare pytanie, ale używam synonimów. Podobno zapytanie jest wykonywane na serwerze bazy danych A i szuka tabeli na serwerze bazy danych B, który nie istnieje na serwerze A. Dodaj następnie synonim w bazie danych, która wywołuje twoją tabelę z serwera B. Twoje zapytanie nie musi dołącz dowolne schematy lub różne nazwy baz danych, wystarczy wywołać nazwę tabeli jak zwykle i zadziała.
Nie ma potrzeby łączenia serwerów, ponieważ synonimy na powiedzmy są rodzajem łączenia.
źródło
Obiekty serwera ---> serwer połączony ---> nowy serwer połączony
Na połączonym serwerze napisz nazwę serwera lub adres IP dla innego serwera i wybierz SQL Server W zabezpieczeniach wybierz (wybierz przy użyciu tego kontekstu bezpieczeństwa) Wpisz login i hasło dla innego serwera
Teraz podłączony, a następnie użyj
źródło
Uproszczone rozwiązanie do dodawania połączonych serwerów
Pierwszy serwer
Drugie logowanie
Wykonuj zapytania z łącza do lokalnej bazy danych
źródło