Będziesz musiał użyć sp_addlinkedserver
aby utworzyć łącze do serwera. Zobacz dokumentację referencyjną do użycia. Po ustanowieniu łącza do serwera utworzysz zapytanie w normalny sposób, po prostu poprzedziwszy nazwę bazy danych nazwą innego serwera. Tzn.:
-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
ON tab1.ID = tab2.ID
Po ustanowieniu linku możesz również użyć OPENQUERY
do wykonania instrukcji SQL na zdalnym serwerze i przesłania tylko danych z powrotem do Ciebie. Może to być nieco szybsze i pozwoli zdalnemu serwerowi zoptymalizować zapytanie. Jeśli buforujesz dane w tymczasowej (lub w pamięci) tabeli w DB1
w powyższym przykładzie będziesz mógł wykonać zapytanie, tak jak dołączenie do standardowej tabeli. Na przykład:
-- Fetch data from the other database server
SELECT *
INTO #myTempTable
FROM OPENQUERY([DB2], 'SELECT * FROM [MyDatabaseOnDB2].[dbo].[MyOtherTable]')
-- Now I can join my temp table to see the data
SELECT * FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
INNER JOIN #myTempTable tab2 ON tab1.ID = tab2.ID
Zapoznaj się z dokumentacją OPENQUERY, aby zobaczyć więcej przykładów. Powyższy przykład jest dość wymyślny. Zdecydowanie użyłbym pierwszej metody w tym konkretnym przykładzie, ale drugiej opcji przy użyciu OPENQUERY
może zaoszczędzić trochę czasu i wydajności, jeśli użyjesz zapytania do odfiltrowania niektórych danych.