Le format devrait probablement être:
<server>.<database>.<schema>.<table>
Par exemple: DatabaseServer1.db1.dbo.table1
Mettre à jour : je sais que c'est une vieille question et la réponse que j'ai est correcte; cependant, je pense que quiconque tombera dessus devrait savoir quelques choses.
A savoir, lors de l'interrogation sur un serveur lié dans une situation de jointure, la table ENTIER du serveur lié sera probablement téléchargée sur le serveur à partir duquel la requête s'exécute afin de réaliser l'opération de jointure. Dans le cas de l'OP, à la fois table1
de DB1
et table1
de DB2
seront transférés dans leur intégralité au serveur exécutant la requête, vraisemblablement nommé DB3
.
Si vous avez des tables volumineuses, cela peut entraîner une opération qui prend beaucoup de temps à exécuter. Après tout, il est maintenant limité par les vitesses de trafic réseau qui sont des ordres de grandeur plus lentes que la mémoire ou même les vitesses de transfert de disque.
Si possible, effectuez une seule requête sur le serveur distant, sans joindre à une table locale, pour extraire les données dont vous avez besoin dans une table temporaire. Puis interrogez-vous sur cela.
Si ce n'est pas possible, vous devez examiner les différentes choses qui obligeraient le serveur SQL à charger la table entière localement. Par exemple en utilisant GETDATE()
ou même certaines jointures. D'autres tueurs de performance incluent 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.