Dovrai utilizzare sp_addlinkedserver
per creare un collegamento al server. Vedere la documentazione di riferimento per l'utilizzo. Una volta stabilito il collegamento al server, costruirai la query normalmente, semplicemente anteponendo il nome del database all'altro server. IE:
-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
ON tab1.ID = tab2.ID
Una volta stabilito il collegamento, puoi anche utilizzare OPENQUERY
per eseguire un'istruzione SQL sul server remoto e trasferire solo i dati all'utente. Questo può essere un po' più veloce e consentirà al server remoto di ottimizzare la tua query. Se memorizzi i dati nella cache in una tabella temporanea (o in memoria) su DB1
nell'esempio sopra, sarai in grado di interrogarlo proprio come unirti a una tabella standard. Ad esempio:
-- 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
Consulta la documentazione di OPENQUERY per vedere altri esempi. L'esempio sopra è piuttosto artificioso. Userei sicuramente il primo metodo in questo esempio specifico, ma la seconda opzione usando OPENQUERY
puoi risparmiare tempo e prestazioni se usi la query per filtrare alcuni dati.