Il y a deux tables dans deux bases de données différentes sur des serveurs différents, je dois les joindre pour faire quelques requêtes. Quelles options ai-je? Que devrais-je faire?
102
Il y a deux tables dans deux bases de données différentes sur des serveurs différents, je dois les joindre pour faire quelques requêtes. Quelles options ai-je? Que devrais-je faire?
Réponses:
Vous devrez utiliser
sp_addlinkedserver
pour créer un lien de serveur. Consultez la documentation de référence pour l'utilisation. Une fois le lien serveur établi, vous construirez la requête normalement, en préfixant simplement le nom de la base de données avec l'autre serveur. C'EST À DIRE:Une fois le lien établi, vous pouvez également utiliser
OPENQUERY
pour exécuter une instruction SQL sur le serveur distant et ne transférer que les données vers vous. Cela peut être un peu plus rapide et permettra au serveur distant d'optimiser votre requête. Si vous mettez en cache les données dans une table temporaire (ou en mémoire)DB1
dans l'exemple ci-dessus, vous serez en mesure de l'interroger comme pour rejoindre une table standard. Par exemple:Consultez la documentation d'OPENQUERY pour voir d'autres exemples. L'exemple ci-dessus est assez artificiel. J'utiliserais certainement la première méthode dans cet exemple spécifique, mais la deuxième option utilisant
OPENQUERY
peut économiser du temps et des performances si vous utilisez la requête pour filtrer certaines données.la source
Essaye ça:
la source
Si un serveur lié n'est pas autorisé par votre dba, vous pouvez utiliser OPENROWSET. Books Online vous fournira la syntaxe dont vous avez besoin.
la source
Dans une perspective d'entreprise pratique, la meilleure pratique consiste à créer une copie en miroir de la table de base de données dans votre base de données, puis à demander à une tâche / procédure de la mettre à jour avec les delta toutes les heures.
la source
Une jointure de deux tables est mieux faite par un SGBD, donc cela devrait être fait de cette façon. Vous pouvez mettre en miroir la plus petite table ou un sous-ensemble de celle-ci sur l'une des bases de données, puis les joindre. On pourrait être tenté de faire cela sur un serveur ETL comme informatica mais je suppose que ce n'est pas conseillé si les tables sont énormes.
la source
Si l'option de lien de base de données n'est pas disponible, une autre voie que vous pouvez emprunter consiste à lier les tables via ODBC à quelque chose comme des rapports MS Access ou Crystal et à y effectuer la jointure.
la source
Peut-être que les noms de base de données codés en dur ne sont pas toujours la meilleure approche dans une requête SQL. Ainsi, ajouter des synonymes serait une meilleure approche. Il n'est pas toujours vrai que les bases de données portent le même nom dans plusieurs environnements intermédiaires. Ils peuvent consister en des postfixes comme PROD, UAT, SIT, QA et ainsi de suite. Soyez donc conscient des requêtes codées en dur et rendez-les plus dynamiques.
Approche n ° 1: utilisez des synonymes pour lier des tables entre des bases de données sur le même serveur.
Approche n ° 2: collectez les données séparément de chaque base de données et joignez-les à votre code. Vos chaînes de connexion à la base de données peuvent faire partie de la configuration de votre serveur d'applications via une base de données ou un fichier de configuration.
la source
J'ai essayé ce code ci-dessous et cela fonctionne bien
la source
Vous pouvez essayer ce qui suit:
la source
pour cela, suivez simplement la requête ci-dessous
Là où j'ai écrit databasename, vous devez définir le nom de la base de données. Si vous êtes dans la même base de données, vous n'avez donc pas besoin de définir le nom de la base de données, mais si vous êtes dans une autre base de données, vous devez mentionner le nom de la base de données comme chemin ou cela vous montrera une erreur. J'espère que j'ai rendu votre travail facile
la source
Alors que j'avais du mal à joindre ces deux tables, j'ai réussi à faire exactement ce que je voulais en ouvrant les deux bases de données distantes en même temps. MySQL 5.6 (php 7.1) et l'autre MySQL 5.1 (php 5.6)
Si vous obtenez ces deux OK à l'écran, les deux bases de données sont ouvertes et prêtes. Ensuite, vous pouvez procéder à vos requêtes.
J'essayais de faire des jointures mais depuis que j'ai ouvert ces deux bases de données, je peux faire des va-et-vient pour faire des requêtes en changeant simplement la connexion
$mysqli1
ou$mysqli2
Cela a fonctionné pour moi, j'espère que cela aide ...
la source