Das Format sollte wahrscheinlich sein:
<server>.<database>.<schema>.<table>
Zum Beispiel: DatabaseServer1.db1.dbo.table1
Aktualisieren : Ich weiß, dass dies eine alte Frage ist und die Antwort, die ich habe, richtig ist. Ich denke jedoch, dass jeder andere, der darüber stolpert, ein paar Dinge wissen sollte.
Beim Abfragen eines Verbindungsservers in einer Verknüpfungssituation wird nämlich die GESAMTE Tabelle vom Verbindungsserver wahrscheinlich auf den Server heruntergeladen, von dem die Abfrage ausgeführt wird, um die Verbindungsoperation auszuführen. Im Fall des OP werden sowohl table1
von DB1
als auch table1
von DB2
vollständig an den Server übertragen, der die Abfrage ausführt, vermutlich benanntDB3
.
Wenn Sie große Tabellen haben, kann dies sein dies zu einem Vorgang führen, dessen Ausführung lange dauert. Immerhin wird es jetzt durch Netzwerkverkehrsgeschwindigkeiten eingeschränkt, die um Größenordnungen langsamer sind als Speicher- oder sogar Plattenübertragungsgeschwindigkeiten.
Führen Sie nach Möglichkeit eine einzelne Abfrage für den Remoteserver durch, ohne sich einer lokalen Tabelle anzuschließen, um die benötigten Daten in eine temporäre Tabelle zu ziehen. Dann fragen Sie ab.
Wenn dies nicht möglich ist, müssen Sie sich die verschiedenen Dinge ansehen, die dazu führen würden, dass SQL Server die gesamte Tabelle lokal laden muss. Zum Beispiel mit GETDATE()
oder sogar bestimmten Joins. Andere Leistungskiller schließen ein, keine angemessenen Rechte zu gewähren.
Weitere Informationen finden Sie unter http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ .
Dies kann Ihnen helfen.
quelle
Wenn Sie immer noch Probleme mit finden
<server>.<database>.<schema>.<table>
Fügen Sie den Servernamen in ein
[]
quelle
dbo.databaseserver1.db1.dbo.table1
Wenn Sie Probleme mit diesen anderen Antworten haben , versuchen Sie es
OPENQUERY
Beispiel:
quelle
Sie müssen das Schema / den Eigentümer (standardmäßig dbo) als Teil der Referenz angeben. Außerdem ist es vorzuziehen, den neueren Join-Stil (ANSI-92) zu verwenden.
quelle
Dies ist der richtige Weg, um anzurufen. Stellen Sie sicher, dass die Server verbunden sind, bevor Sie die Abfrage ausführen!
So suchen Sie nach Verbindungsservern:
quelle
Ich hoffe, es hilft zu verstehen, wie man eine Abfrage für einen Verbindungsserver ausführt
quelle
Normalerweise sollten direkte Abfragen bei Verbindungsservern nicht verwendet werden, da sie häufig die temporäre Datenbank von SQL Server verwenden. Im ersten Schritt werden Daten in die temporäre Datenbank abgerufen und anschließend gefiltert. Es gibt viele Themen dazu. Es ist besser, open OPENQUERY zu verwenden, da SQL an den Quell-Verbindungsserver übergeben wird und dann gefilterte Ergebnisse zurückgegeben werden, z
quelle
Für das, was es wert ist, fand ich die folgende Syntax, um am besten zu funktionieren:
SELECT * FROM [LINKED_SERVER] ... [TABLE]
Ich konnte die Empfehlungen anderer unter Verwendung des Datenbanknamens nicht zum Laufen bringen. Darüber hinaus hat diese Datenquelle kein Schema.
quelle
Klicken Sie mit der rechten Maustaste auf eine Tabelle und klicken Sie als Auswahl auf Skripttabelle
quelle
Die folgende Abfrage funktioniert am besten.
quelle
PostgreSQL :
Sie müssen den DBName in der Abfrage weglassen :
SELECT * FROM OPENQUERY([LinkedServer], 'select * from schema."tablename"')
quelle