Es gibt zwei Tabellen in zwei verschiedenen Datenbanken auf verschiedenen Servern. Ich muss sie verbinden, um nur wenige Abfragen zu stellen. Welche Möglichkeiten habe ich? Was soll ich machen?
102
Es gibt zwei Tabellen in zwei verschiedenen Datenbanken auf verschiedenen Servern. Ich muss sie verbinden, um nur wenige Abfragen zu stellen. Welche Möglichkeiten habe ich? Was soll ich machen?
Antworten:
Sie müssen verwenden
sp_addlinkedserver
, um eine Serververbindung zu erstellen. Informationen zur Verwendung finden Sie in der Referenzdokumentation . Sobald die Serververbindung hergestellt ist, erstellen Sie die Abfrage wie gewohnt, indem Sie dem Datenbanknamen lediglich den anderen Server voranstellen. IE:Sobald die Verbindung hergestellt ist, können Sie auch
OPENQUERY
eine SQL-Anweisung auf dem Remote-Server ausführen und nur die Daten zurück an Sie übertragen. Dies kann etwas schneller sein und ermöglicht es dem Remote-Server, Ihre Abfrage zu optimieren. Wenn Sie die Daten in einer temporären (oder speicherinternen) TabelleDB1
im obigen Beispiel zwischenspeichern, können Sie sie wie beim Verbinden einer Standardtabelle abfragen. Beispielsweise:In der Dokumentation zu OPENQUERY finden Sie weitere Beispiele. Das obige Beispiel ist ziemlich erfunden. Ich würde definitiv die erste Methode in diesem speziellen Beispiel verwenden, aber die zweite Option
OPENQUERY
kann Zeit und Leistung sparen, wenn Sie die Abfrage zum Herausfiltern einiger Daten verwenden.quelle
Versuche dies:
quelle
Wenn ein Verbindungsserver von Ihrer Datenbank nicht zugelassen wird, können Sie OPENROWSET verwenden. Books Online bietet die Syntax, die Sie benötigen.
quelle
Aus praktischer Unternehmenssicht besteht die beste Vorgehensweise darin, eine gespiegelte Kopie der Datenbanktabelle in Ihrer Datenbank zu erstellen und diese dann stündlich von einem Task / Proc mit Delta aktualisieren zu lassen.
quelle
Ein Join von zwei Tabellen wird am besten von einem DBMS durchgeführt, daher sollte dies auf diese Weise erfolgen. Sie können die kleinere Tabelle oder Teilmenge davon in einer der Datenbanken spiegeln und sie dann verbinden. Man könnte versucht sein, dies auf einem ETL-Server wie informatica zu tun, aber ich denke, es ist nicht ratsam, wenn die Tabellen riesig sind.
quelle
Wenn die Datenbankverknüpfungsoption nicht verfügbar ist, können Sie die Tabellen auch über ODBC mit MS Access- oder Crystal Reports-Berichten verknüpfen und dort den Join durchführen.
quelle
Möglicherweise sind fest codierte Datenbanknamen nicht immer der beste Ansatz innerhalb einer SQL-Abfrage. Das Hinzufügen von Synonymen wäre daher ein besserer Ansatz. Es ist nicht immer so, dass Datenbanken in mehreren Staging-Umgebungen denselben Namen haben. Sie können aus Postfixes wie PROD, UAT, SIT, QA usw. bestehen. Achten Sie also auf fest codierte Abfragen und machen Sie sie dynamischer.
Ansatz 1: Verwenden Sie Synonyme, um Tabellen zwischen Datenbanken auf demselben Server zu verknüpfen.
Ansatz 2: Sammeln Sie Daten getrennt von jeder Datenbank und fügen Sie sie in Ihren Code ein. Ihre Datenbankverbindungszeichenfolgen können Teil Ihrer App-Server-Konfiguration sein, entweder über eine Datenbank oder eine Konfigurationsdatei.
quelle
Ich habe diesen Code unten ausprobiert und er funktioniert einwandfrei
quelle
Sie könnten Folgendes versuchen:
quelle
Folgen Sie dazu einfach der folgenden Abfrage
Wo ich den Datenbanknamen geschrieben habe, müssen Sie den Namen der Datenbank definieren. Wenn Sie sich in derselben Datenbank befinden, müssen Sie den Datenbanknamen nicht definieren. Wenn Sie sich jedoch in einer anderen Datenbank befinden, müssen Sie den Datenbanknamen als Pfad angeben, da sonst ein Fehler angezeigt wird. Hoffe, ich habe deine Arbeit leicht gemacht
quelle
Während ich Probleme hatte, diese beiden Tabellen zu verbinden, konnte ich genau das tun, was ich wollte, indem ich beide entfernten Datenbanken gleichzeitig öffnete. MySQL 5.6 (PHP 7.1) und das andere MySQL 5.1 (PHP 5.6)
Wenn Sie diese beiden OKs auf dem Bildschirm erhalten, sind beide Datenbanken geöffnet und bereit. Dann können Sie mit Ihren Abfragen fortfahren.
Ich habe versucht, einige Joins durchzuführen, aber da ich diese beiden DBs geöffnet habe, kann ich Abfragen durchführen, indem ich einfach die Verbindung
$mysqli1
oder ändere$mysqli2
Es hat bei mir funktioniert, ich hoffe es hilft ... Prost
quelle