El formato probablemente debería ser:
<server>.<database>.<schema>.<table>
Por ejemplo: DatabaseServer1.db1.dbo.table1
Actualización : sé que esta es una pregunta antigua y la respuesta que tengo es correcta; sin embargo, creo que cualquier otra persona que se encuentre con esto debería saber algunas cosas.
Es decir, cuando se consulta contra un servidor vinculado en una situación de combinación, la tabla COMPLETA del servidor vinculado probablemente se descargará al servidor desde el que se ejecuta la consulta para realizar la operación de combinación. En el caso del OP, tanto table1
desde DB1
como table1
desde DB2
se transferirán en su totalidad al servidor que ejecuta la consulta, presumiblemente nombrado DB3
.
Si tiene mesas grandes, esto puede resultar en una operación que tarda mucho en ejecutarse. Después de todo, ahora está limitado por las velocidades de tráfico de la red, que son órdenes de magnitud más lentas que las velocidades de transferencia de la memoria o incluso del disco.
Si es posible, realice una única consulta en el servidor remoto, sin unirse a una tabla local, para extraer los datos que necesita en una tabla temporal. Entonces consulta fuera de eso.
Si eso no es posible, debe observar las diversas cosas que harían que el servidor SQL tuviera que cargar toda la tabla localmente. Por ejemplo, utilizando GETDATE()
o incluso determinadas combinaciones. Otros asesinos del desempeño incluyen no otorgar los derechos apropiados.
Consulte http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ para obtener más información.
Esto puede ayudarte.
fuente
Si aún encuentra problemas con
<server>.<database>.<schema>.<table>
Incluya el nombre del servidor en
[]
fuente
dbo.databaseserver1.db1.dbo.table1
Para aquellos que tienen problemas con estas otras respuestas , intente
OPENQUERY
Ejemplo:
fuente
Debe especificar el esquema / propietario (dbo por defecto) como parte de la referencia. Además, sería preferible utilizar el estilo de combinación más reciente (ANSI-92).
fuente
Esta es la forma correcta de llamar. ¡Asegúrese de verificar que los servidores estén vinculados antes de ejecutar la consulta!
Para verificar si hay servidores vinculados, llame a:
fuente
Espero que ayude a comprender cómo ejecutar la consulta para el servidor vinculado
fuente
Por lo general, las consultas directas no deben usarse en el caso de un servidor vinculado porque usa mucho la base de datos temporal del servidor SQL. En el primer paso, los datos se recuperan en la base de datos temporal y luego se realiza el filtrado. Hay muchos hilos sobre esto. Es mejor usar OPENQUERY abierto porque pasa SQL al servidor vinculado de origen y luego devuelve resultados filtrados, por ejemplo
fuente
Por lo que vale, encontré que la siguiente sintaxis funciona mejor:
SELECCIONAR * DE [LINKED_SERVER] ... [TABLE]
No pude hacer que las recomendaciones de otros funcionen, usando el nombre de la base de datos. Además, esta fuente de datos no tiene esquema.
fuente
haga clic derecho en una tabla y haga clic en la tabla de secuencia de comandos como seleccione
fuente
La siguiente consulta funciona mejor.
fuente
PostgreSQL :
Debe omitir el DBName de la consulta :
SELECT * FROM OPENQUERY([LinkedServer], 'select * from schema."tablename"')
fuente