Le format devrait probablement être:
<server>.<database>.<schema>.<table>
Par exemple: DatabaseServer1.db1.dbo.table1
Mise à jour: Je sais que c'est une vieille question et la réponse que je avoir est correct; Cependant, je pense que tout le monde qui trébuche sur cela devrait savoir quelques choses.
A savoir, lors de l'interrogation sur un serveur lié dans une jointure situation de la table ENTIER du serveur lié sera probablement être téléchargés sur le serveur de la requête est en cours d'exécution afin de faire 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 exécutant la requête, vraisemblablement nommé DB3
.
Si vous avez de grandes tables, ce peut entraîner une opération qui prend beaucoup de temps à s'exécuter. Après tout, il est maintenant contraint par des vitesses de trafic réseau qui sont plus faibles 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 vous joindre à une table locale, pour extraire les données dont vous avez besoin dans une table temporaire. Puis interroger de cela.
Ce n'est pas possible alors vous devez regarder les différentes choses qui obligeraient SQL Server à 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. Pour plus d'informations, voir http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/.
si les bases de données eserver name a un trait d'union, besoin de l'entourer de crochets – bmw0128
@ bmw0128: Mieux encore, utilisez des guillemets doubles: il est supporté par presque toutes les plateformes, contrairement aux crochets de Microsoft. –
Vous devez également utiliser les crochets ou les guillemets lorsque le nom du serveur de base de données comporte une période. –