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.
Cela peut vous aider.
la source
Si vous rencontrez toujours un problème avec
<server>.<database>.<schema>.<table>
Insérez le nom du serveur dans
[]
la source
dbo.databaseserver1.db1.dbo.table1
Pour ceux qui ont des problèmes avec ces autres réponses , essayez
OPENQUERY
Exemple:
la source
Vous devez spécifier le schéma / propriétaire (dbo par défaut) dans le cadre de la référence. En outre, il serait préférable d'utiliser le style de jointure le plus récent (ANSI-92).
la source
C'est la bonne façon d'appeler. Assurez-vous de vérifier que les serveurs sont liés avant d'exécuter la requête!
Pour vérifier les serveurs liés, appelez:
la source
J'espère que cela aide à comprendre, comment exécuter une requête pour le serveur lié
la source
Habituellement, les requêtes directes ne doivent pas être utilisées dans le cas d'un serveur lié car il utilise fortement la base de données temporaire du serveur SQL. À la première étape, les données sont extraites dans la base de données temporaire, puis le filtrage se produit. Il existe de nombreux fils à ce sujet. Il est préférable d'utiliser Open OPENQUERY car il transmet SQL au serveur lié source, puis renvoie des résultats filtrés, par exemple
la source
Pour ce que ça vaut, j'ai trouvé la syntaxe suivante qui fonctionnait le mieux:
SELECT * FROM [LINKED_SERVER] ... [TABLE]
Je n'ai pas pu faire fonctionner les recommandations des autres, en utilisant le nom de la base de données. En outre, cette source de données n'a pas de schéma.
la source
faites un clic droit sur une table et cliquez sur la table de script comme sélectionnez
la source
Il est préférable de suivre la requête.
la source
PostgreSQL :
Vous devez omettre le DBName de la requête :
SELECT * FROM OPENQUERY([LinkedServer], 'select * from schema."tablename"')
la source