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.