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 ?

2voto

shadow0359 Points 892

Dans sql-server (local), il existe deux façons d'interroger des données à partir d'un serveur lié (distant).

Requête distribuée (notation à quatre parties) :

  1. Peut ne pas fonctionner avec tous les serveurs distants. Si votre serveur distant est MySQL, la requête distribuée ne fonctionnera pas.
  2. Les filtres et les jointures peuvent ne pas fonctionner efficacement. Si vous avez une requête simple avec une clause WHERE, sql-server(local) pourrait d'abord récupérer la table entière du serveur distant et ensuite appliquer la clause WHERE localement. Dans le cas de grandes tables, cela est très inefficace car beaucoup de données seront déplacées du serveur distant au serveur local. Cependant, ce n'est pas toujours le cas. Si le serveur local a accès aux statistiques des tables du serveur distant, cela peut être aussi efficace que d'utiliser openquery. Plus de détails
  3. Du côté positif, la syntaxe T-SQL fonctionnera.

    SELECT * FROM [SERVER_NAME].[DATABASE_NAME].[SCHEMA_NAME].[TABLE_NAME]

OPENQUERY

  1. Il s'agit essentiellement d'un passage. La requête est entièrement traitée sur le serveur distant, ce qui permet d'utiliser l'index ou toute autre optimisation sur le serveur distant. Cela permet de réduire efficacement la quantité de données transférées du serveur SQL local au serveur distant.
  2. L'inconvénient mineur de cette approche est que la syntaxe T-SQL ne fonctionnera pas si le serveur distant est autre que sql-server.

    SELECT FROM OPENQUERY([SERVER_NAME], 'SELECT FROM DATABASE_NAME.SCHEMA_NAME.TABLENAME')

Globalement, OPENQUERY semble être une bien meilleure option à utiliser dans la majorité des cas.

1voto

AgungPanduan.Com Points 407

J'ai essayé de trouver le type de données dans la table de link_server en utilisant openquery et les résultats ont été concluants.

SELECT * FROM OPENQUERY (LINKSERVERNAME, '
SELECT DATA_TYPE, COLUMN_NAME
FROM [DATABASENAME].INFORMATION_SCHEMA.COLUMNS
WHERE 
     TABLE_NAME  =''TABLENAME''
')

Son travail pour moi

0voto

Vijay S Points 222

La requête suivante est la meilleure.

Essayez cette requête :

SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT * FROM [DATABASE_NAME].[SCHEMA].[TABLE_NAME]')

Il aide beaucoup à relier MySQL à MS SQL

0voto

Shadi Namrouti Points 1453

PostgreSQL :

  1. Vous devez fournir un nom de la base de données dans la source de données DSN .
  2. Exécutez Management Studio en tant que Administrateur
  3. Vous devez omettre le nom de base de données de la requête :

    SELECT * FROM OPENQUERY([LinkedServer], 'select * from schema."tablename"')

0voto

novog Points 1

Pour MariaDB (et probablement aussi pour MySQL), la tentative de spécifier le schéma à l'aide de la syntaxe à trois points ne fonctionne pas, ce qui entraîne l'erreur "invalid use of schema or catalog". La solution suivante a fonctionné :

  1. Dans SSMS, allez dans Objets du serveur > Serveurs liés > Fournisseurs > MSDASQL.
  2. Assurez-vous que les cases "Paramètre dynamique", "Niveau zéro uniquement" et "Autoriser en cours de processus" sont toutes cochées.

Vous pouvez ensuite interroger n'importe quel schéma et n'importe quelle table en utilisant la syntaxe suivante :

SELECT TOP 10 *
FROM LinkedServerName...[SchemaName.TableName]

Source : SELECT * FROM MySQL Linked Server en utilisant SQL Server sans OpenQuery

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