Deberá usar sp_addlinkedserver
para crear un enlace de servidor. Consulte la documentación de referencia para su uso. Una vez que se establezca el enlace del servidor, construirá la consulta de manera normal, simplemente anteponiendo el nombre de la base de datos con el otro servidor. ES:
-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
ON tab1.ID = tab2.ID
Una vez que se establece el enlace, también puede usar OPENQUERY
para ejecutar una instrucción SQL en el servidor remoto y transferirle solo los datos. Esto puede ser un poco más rápido y permitirá que el servidor remoto optimice su consulta. Si almacena en caché los datos en una tabla temporal (o en memoria) en DB1
en el ejemplo anterior, podrá consultarlo como si se uniera a una tabla estándar. Por ejemplo:
-- 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
Consulte la documentación de OPENQUERY para ver más ejemplos. El ejemplo anterior es bastante artificial. Definitivamente usaría el primer método en este ejemplo específico, pero la segunda opción usando OPENQUERY
puede ahorrar algo de tiempo y rendimiento si utiliza la consulta para filtrar algunos datos.