sql >> Databasteknik >  >> RDS >> Sqlserver

Fråga efter data genom att sammanfoga två tabeller i två databaser på olika servrar

Du måste använda sp_addlinkedserver för att skapa en serverlänk. Se referensdokumentationen för användning. När serverlänken har upprättats kommer du att konstruera frågan som vanligt, bara prefixet databasnamnet med den andra servern. I.E:

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

När länken är etablerad kan du också använda OPENQUERY att köra en SQL-sats på fjärrservern och endast överföra data tillbaka till dig. Detta kan vara lite snabbare, och det kommer att låta fjärrservern optimera din fråga. Om du cachelagrar data i en temporär (eller i minnet) tabell på DB1 i exemplet ovan kommer du att kunna fråga det precis som att gå med i en standardtabell. Till exempel:

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

Kolla in dokumentationen för OPENQUERY för att se några fler exempel. Exemplet ovan är ganska konstruerat. Jag skulle definitivt använda den första metoden i det här specifika exemplet, men det andra alternativet med OPENQUERY kan spara lite tid och prestanda om du använder frågan för att filtrera bort vissa data.



  1. SQL delad kommaseparerad rad

  2. Beräkna ålder baserat på födelsedatum

  3. Skapa nya moduler med PostgreSQL Create Extension

  4. Android:Hur begär jag en markör för att uppdatera ListView efter att ha raderat databasraden?