sql >> Base de Datos >  >> RDS >> Sqlserver

Consultar datos uniendo dos tablas en dos bases de datos en diferentes servidores

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.