2011-02-28 71 views

Respuesta

60

Deberá usar sp_addlinkedserver para crear un enlace al servidor. Consulte el reference documentation para conocer su 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. I.E:

-- FROM DB1 
SELECT * 
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1 
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2 
     ON tab1.ID = tab2.ID 

Una vez que se establezca el enlace, también se puede utilizar OPENQUERY para ejecutar una instrucción SQL en el servidor remoto y transferir sólo los datos de nuevo a usted. 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 la memoria) en el DB1 en el ejemplo anterior, podrá consultarla de la misma forma 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 

Mira la documentation for 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 que usa OPENQUERY puede ahorrar algo de tiempo y rendimiento si usa la consulta para filtrar algunos datos.

+1

es posible con php-mysql ..si es así, ¿puede por favor sugerirme una forma de cómo puedo crecer con esa opción? – Jhanvi

+1

No tengo idea si MySQL admite servidores vinculados. Esta respuesta es específica de Microsoft SQL Server. –

+0

Si alguien está buscando una respuesta PostgreSQL, intente esto: http://www.postgresql.org/docs/9.4/static/postgres-fdw.html – PJSCopeland

4

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

1

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

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

8

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 
1

Probé por debajo de este código y que está funcionando bien

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

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

0

puede probar con el 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

nombres de bases de datos Tal vez no modificables no es el mejor enfoque siempre dentro de un-consulta SQL. Por lo tanto, agregar sinónimos sería un mejor enfoque. No siempre ocurre que las bases de datos tengan el mismo nombre en varios entornos de ensayo. Pueden consistir en postfixes como PROD, UAT, SIT, QA, etc. Así que tenga en cuenta las consultas codificadas y agrúpelas.

Método n.º 1: utilice sinónimos para vincular tablas entre bases de datos en el mismo servidor.

Método n.º 2: recopile datos por separado de cada base de datos y únalo a su código. Las cadenas de conexión de su base de datos podrían ser parte de la configuración de su servidor de aplicaciones a través de una base de datos o un archivo de configuración.

0

para esto simplemente siguen a continuación consulta

select a.Id,a.type,b.Name,b.City from DatabaseName.dbo.TableName a left join DatabaseName.dbo.TableName b on a.Id=b.Id 

donde escribí nombrebasedatos, usted tiene que definir el nombre de la base de datos. Si está en la misma base de datos, por lo que no necesita definir el nombre de la base de datos, pero si se encuentra en otra base de datos, debe mencionar el nombre de la base de datos como ruta de acceso o le mostrará un error. Espero que haya hecho su trabajo fácil

Cuestiones relacionadas