Le format devrait probablement être :
<server>.<database>.<schema>.<table>
Par exemple : DatabaseServer1.db1.dbo.table1
Mise à jour : Je sais qu'il s'agit d'une vieille question et que la réponse que j'ai est correcte ; cependant, je pense que toute autre personne tombant sur cette question devrait savoir certaines choses.
En effet, lors d'une requête contre un serveur lié dans une situation de jointure, la fonction ENTIRE du serveur lié sera probablement être téléchargée sur le serveur à partir duquel la requête est exécutée afin d'effectuer l'opération de jointure. Dans le cas de l'OP, les deux table1
de DB1
et table1
de DB2
seront transférés dans leur intégralité au serveur qui exécute la requête, vraisemblablement nommé DB3
.
Si vous avez de grandes tables, cette mai se traduisent par une opération qui prend beaucoup de temps à s'exécuter. Après tout, elle est maintenant limitée par la vitesse du trafic réseau, qui est plusieurs fois plus lente que la vitesse de transfert de la mémoire ou même du disque.
Si possible, effectuez une seule requête sur le serveur distant, sans joindre une table locale, afin d'extraire les données dont vous avez besoin dans une table temporaire. Effectuez ensuite une requête à partir de cette table.
Si ce n'est pas possible, il faut alors examiner les différentes raisons pour lesquelles le serveur SQL doit charger la table entière en local. Par exemple, en utilisant GETDATE()
ou même certaines jointures. Parmi les autres facteurs qui tuent les performances, citons le fait de ne pas donner les droits appropriés.
Voir http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ pour plus d'informations.