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.