sql >> Database >  >> RDS >> Sqlserver

Gegevens opvragen door twee tabellen samen te voegen in twee databases op verschillende servers

U moet sp_addlinkedserver . gebruiken om een ​​serverlink te maken. Zie de referentiedocumentatie voor gebruik. Zodra de serverkoppeling tot stand is gebracht, bouwt u de query op de normale manier op, door de databasenaam vooraf te laten gaan aan de andere server. IE:

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

Zodra de koppeling tot stand is gebracht, kunt u ook OPENQUERY . gebruiken om een ​​SQL-instructie op de externe server uit te voeren en alleen de gegevens naar u terug te sturen. Dit kan iets sneller zijn en de externe server kan uw zoekopdracht optimaliseren. Als u de gegevens in een tijdelijke (of in-memory) tabel op DB1 . plaatst in het bovenstaande voorbeeld, dan kun je er een query op uitvoeren, net als bij een standaardtabel. Bijvoorbeeld:

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

Bekijk de documentatie voor OPENQUERY om nog meer voorbeelden te zien. Het bovenstaande voorbeeld is behoorlijk gekunsteld. Ik zou zeker de eerste methode gebruiken in dit specifieke voorbeeld, maar de tweede optie met OPENQUERY kan wat tijd en prestaties besparen als u de query gebruikt om bepaalde gegevens uit te filteren.



  1. MySQL mislukt op:mysql ERROR 1524 (HY000):Plugin 'auth_socket' is niet geladen

  2. SQL SERVER 2016 – Uitvoeringsplannen vergelijken

  3. Missiekritieke toegangstoepassingen identificeren en beheren tijdens een ontwikkelingsproject

  4. Hoe kan ik een lijst maken van alle externe sleutels die verwijzen naar een bepaalde tabel in SQL Server?