Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Abfragen von Daten durch Verbinden von zwei Tabellen in zwei Datenbanken auf verschiedenen Servern

Sie müssen sp_addlinkedserver verwenden um einen Serverlink zu erstellen. Informationen zur Verwendung finden Sie in der Referenzdokumentation. Sobald die Serververbindung hergestellt ist, konstruieren Sie die Abfrage wie gewohnt, indem Sie dem Datenbanknamen einfach den anderen Server voranstellen. D.h.:

-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
        ON tab1.ID = tab2.ID

Sobald die Verknüpfung hergestellt ist, können Sie auch OPENQUERY verwenden um eine SQL-Anweisung auf dem Remote-Server auszuführen und nur die Daten an Sie zurückzusenden. Dies kann etwas schneller sein und lässt den Remote-Server Ihre Abfrage optimieren. Wenn Sie die Daten in einer temporären (oder speicherinternen) Tabelle auf DB1 zwischenspeichern im obigen Beispiel, dann können Sie sie genauso abfragen wie das Verknüpfen einer Standardtabelle. Zum Beispiel:

-- 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

Sehen Sie sich die Dokumentation für OPENQUERY an, um weitere Beispiele zu sehen. Das obige Beispiel ist ziemlich konstruiert. Ich würde in diesem speziellen Beispiel definitiv die erste Methode verwenden, aber die zweite Option mit OPENQUERY kann etwas Zeit und Leistung sparen, wenn Sie die Abfrage verwenden, um einige Daten herauszufiltern.