114 votes

Exemple de requête du serveur lié SQL Server

Dans Management Studio, j'essaie d'exécuter une requête/une jointure entre deux serveurs liés. Est-ce une syntaxe correcte pour utiliser des serveurs de données liés ?

select foo.id 
from databaseserver1.db1.table1 foo, 
     databaseserver2.db1.table1 bar 
where foo.name=bar.name

En fait, il suffit de faire précéder le nom du serveur de données par db.table ?

7voto

Abhishek Jaiswal Points 943
select * from [Server].[database].[schema].[tablename] 

C'est la façon correcte d'appeler. Vérifiez bien que les serveurs sont liés avant d'exécuter la requête !

Pour vérifier les serveurs liés, appelez :

EXEC sys.sp_linkedservers

1 votes

Cela ne fonctionne pas pour certains serveurs non liés à SQL-Server. Elle provoque des erreurs du type ... Un schéma ou un catalogue invalide a été spécifié pour le fournisseur "MSDASQL" pour le serveur lié "MyLinkedServer".

7voto

Shimon Doodkin Points 574

Clic droit sur un tableau et cliquer sur script tableau comme select

enter image description here

0 votes

Ce n'est pas ce que le PO a demandé

4 votes

Ceci montre comment obtenir la syntaxe correcte pour une requête select sur une table liée. le résultat est similaire à la réponse de seans

3 votes

@ShimonDoodkin, un excellent exemple de "ne me donne pas un poisson, mais apprends-moi à pêcher".

4voto

Jaspreet Singh Points 41
select name from drsql01.test.dbo.employee
  • drslq01 est servernmae --linked serer
  • test est le nom de la base de données
  • dbo is schema -default schema
  • employee est le nom de la table

J'espère que cela vous aidera à comprendre comment exécuter une requête pour un serveur lié.

3voto

Muhammad Yaseen Points 151

En général, les requêtes directes ne doivent pas être utilisées dans le cas d'un serveur lié car elles utilisent beaucoup la base de données temporaire du serveur SQL. Dans un premier temps, les données sont récupérées dans la base temporaire, puis le filtrage est effectué. Il existe de nombreux fils de discussion à ce sujet. Il est préférable d'utiliser open OPENQUERY car il transmet le SQL au serveur lié source et renvoie ensuite des résultats filtrés, par ex.

SELECT *
FROM OPENQUERY(Linked_Server_Name , 'select * from TableName where ID = 500')

0 votes

Cette réponse ne comprend pas de nom de base de données

2 votes

J'ai fourni des informations sur la base de données lors de la création du serveur lié. Pour plus de détails, vous pouvez consulter le lien MSDN ci-dessous : msdn.microsoft.com/fr/us/library/ff772782(v=sql.110).aspx

0 votes

Que puis-je faire si mon serveur lié nécessite une authentification et que j'essaie simplement d'effectuer des requêtes depuis mon application PHP en utilisant PDO ?

2voto

Sean Warren Points 21

Pour ce que ça vaut, j'ai trouvé la syntaxe suivante qui fonctionne le mieux :

SELECT * FROM [LINKED_SERVER]...[TABLE]

Je n'ai pas réussi à faire fonctionner les recommandations des autres, en utilisant le nom de la base de données. De plus, cette source de données n'a pas de schéma.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X