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 toute autre personne qui tombe dessus devrait savoir certaines choses.
À savoir, lors d'une requête sur un serveur lié dans une situation de jointure, le ENTIRE table du serveur lié sera probable être téléchargé sur le serveur à partir duquel la requête s'exécute afin d'effectuer l'opération de jointure. Dans le cas de l'OP, à la fois table1
de DB1
et table1
depuis DB2
seront transférés dans leur intégralité au serveur exécutant la requête, vraisemblablement nommé DB3
.
Si vous avez de grandes tables, cela peut entraîner une opération longue à exécuter. Après tout, il est maintenant limité par la vitesse du trafic réseau qui est beaucoup 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 rejoindre une table locale, pour extraire les données dont vous avez besoin dans une table temporaire. Ensuite, 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()
voire certaines jointures. D'autres tueurs de performance incluent le fait de ne pas accorder les droits appropriés.
Voir http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ pour plus d'informations.