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.