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


Hay dos tablas en dos bases de datos diferentes en servidores diferentes, necesito unirme para hacer algunas consultas. ¿Que opciones tengo? ¿Que debería hacer?


75
2018-02-28 17:55


origen


Respuestas:


Tendrás que usar sp_addlinkedserver para crear un enlace de servidor Ver el documentación de referencia para el uso Una vez que se establece el enlace del servidor, construirá la consulta de la forma habitual, simplemente prefijando el nombre de la base de datos con el otro servidor. ES DECIR:

-- 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 de la misma manera que 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

Revisar la documentación para OPENQUERY para ver algunos ejemplos más El ejemplo de arriba es bastante artificial. Definitivamente usaría el primer método en este ejemplo específico, pero la segunda opción es usar OPENQUERY puede ahorrar algo de tiempo y rendimiento si usa la consulta para filtrar algunos datos.


61
2018-02-28 17:59



Prueba esto:

SELECT tab2.column_name  
FROM  [DB1.mdf].[dbo].[table_name_1] tab1 INNER JOIN [DB2.mdf].[dbo].[table_name_2]  tab2   
    ON tab1.col_name = tab2.col_name

8
2018-03-13 06:28



Si su dba no permite un servidor vinculado, puede usar OPENROWSET. Books Online proporcionará la sintaxis que necesita.


4
2018-02-28 18:01



Desde una perspectiva empresarial práctica, la mejor práctica es hacer una copia reflejada de la tabla de la base de datos en su base de datos, y luego simplemente tener una actualización de tarea / proceso con delta cada hora.


2
2017-11-15 15:41



Una combinación de dos tablas se realiza mejor con un DBMS, por lo que debe hacerse de esa manera. Podría duplicar la tabla o subconjunto más pequeño en una de las bases de datos y luego unirlas. Uno podría tener la tentación de hacer esto en un servidor de ETL como informatica, pero supongo que no es recomendable si las tablas son enormes.


1
2018-02-28 18:02



Si la opción de enlace de la base de datos no está disponible, otra ruta que podría tomar es vincular las tablas a través de ODBC a algo como MS Access o Crystal Reports y hacer la unión allí.


1
2018-03-18 17:38



Intenté este código a continuación y funciona bien

SELECT        TimeTrackEmployee.StaffID
FROM            dbo.tblGBSTimeCard AS GBSTimeCard INNER JOIN
                         TimeTrak.dbo.tblEmployee AS TimeTrackEmployee ON GBSTimeCard.[Employee Number] = TimeTrackEmployee.GBSStaffID

1
2017-09-26 10:58



Podrías probar lo siguiente:

select customer1.Id,customer1.Name,customer1.city,CustAdd.phone,CustAdd.Country
from customer1
inner join [EBST08].[Test].[dbo].[customerAddress] CustAdd
on customer1.Id=CustAdd.CustId

0
2017-12-01 10:58