sql >> Database teknologi >  >> RDS >> Sqlserver

Forespørge data ved at forbinde to tabeller i to databaser på forskellige servere

Du skal bruge sp_addlinkedserver for at oprette et serverlink. Se referencedokumentationen for brug. Når serverlinket er etableret, konstruerer du forespørgslen som normalt, idet du blot sætter databasenavnet foran med den anden server. I.E:

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

Når linket er etableret, kan du også bruge OPENQUERY at udføre en SQL-sætning på fjernserveren og kun overføre dataene tilbage til dig. Dette kan være en smule hurtigere, og det vil lade fjernserveren optimere din forespørgsel. Hvis du cacher dataene i en midlertidig (eller i hukommelsen) tabel på DB1 i eksemplet ovenfor, så vil du være i stand til at forespørge på det ligesom at slutte sig til en standardtabel. For eksempel:

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

Tjek dokumentationen til OPENQUERY for at se nogle flere eksempler. Eksemplet ovenfor er ret konstrueret. Jeg ville helt sikkert bruge den første metode i dette specifikke eksempel, men den anden mulighed ved at bruge OPENQUERY kan spare tid og ydeevne, hvis du bruger forespørgslen til at filtrere nogle data fra.



  1. Er en enkelt SQL Server-sætning atomart og konsistent?

  2. Eksport af Oracle Table til Excel-regneark

  3. Grundlæggende om tabeludtryk, del 11 - Synspunkter, ændringsovervejelser

  4. Hvordan kan jeg indstille et maksimalt antal rækker i MySQL-tabellen?