wake-up-neo.com

SQL Server Linked Server-Beispielabfrage

In Management Studio versuche ich, eine Abfrage/einen Join zwischen zwei Verbindungsservern auszuführen. Ist dies eine korrekte Syntax, die verknüpfte Datenbankserver verwendet:

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

Im Allgemeinen stellen Sie der DB-Tabelle nur den Namen des DB-Servers vor.

76
bmw0128

Das Format sollte wahrscheinlich sein:

<server>.<database>.<schema>.<table>

Zum Beispiel: DatabaseServer1.db1.dbo.table1


Update: Ich weiß, dass dies eine alte Frage ist und die Antwort, die ich habe, richtig ist. Ich denke jedoch, dass jeder, der darüber stolpert, ein paar Dinge wissen sollte.

Wenn Sie in einer Join-Situation einen Verbindungsserver abfragen, wird die Tabelle GESAMT vom Verbindungsserver wahrscheinlich auf den Server heruntergeladen, von dem aus die Abfrage ausgeführt wird, um das auszuführen Operation beitreten. Im Falle des OP werden sowohl table1 von DB1 als auch table1 von DB2 vollständig an den Server übertragen, der die Abfrage ausführt, vermutlich DB3

Wenn Sie große Tabellen haben, kann dies mit may zu einer Operation führen, deren Ausführung lange dauert. Immerhin ist es jetzt durch Netzwerkverkehrsgeschwindigkeiten eingeschränkt, die um Größenordnungen langsamer sind als Speicher- oder sogar Plattenübertragungsgeschwindigkeiten.

Wenn möglich, führen Sie eine einzelne Abfrage für den Remote-Server aus, ohne sich einer lokalen Tabelle anzuschließen, um die erforderlichen Daten in eine temporäre Tabelle zu ziehen. Dann fragen Sie das ab. 

Wenn dies nicht möglich ist, müssen Sie die verschiedenen Aspekte prüfen, durch die der SQL Server die gesamte Tabelle lokal laden muss. Zum Beispiel mit GETDATE() oder sogar bestimmten Joins. Andere Leistungskiller beinhalten das Nichtgeben entsprechender Rechte.

Weitere Informationen erhalten Sie unter http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ .

155
NotMe
SELECT * FROM OPENQUERY([SERVER_NAME], 'SELECT * FROM DATABASE_NAME..TABLENAME')

Das kann dir helfen.

19
Akhilesh Kamate

Wenn Sie immer noch ein Problem mit <server>.<database>.<schema>.<table> finden

Servernamen in [] einschließen

9
Mian

Sie müssen das Schema/Eigentümer (standardmäßig Dbo) als Teil der Referenz angeben. Es ist auch vorzuziehen, den neueren Verbindungsstil (ANSI-92) zu verwenden.

select foo.id 
    from databaseserver1.db1.dbo.table1 foo
        inner join databaseserver2.db1.dbo.table1 bar 
            on foo.name = bar.name
8
Joe Stefanelli

Falls Sie Probleme mit diesen anderen Antworten haben, versuchen Sie OPENQUERY

Beispiel:

 SELECT * FROM OPENQUERY([LinkedServer], 'select * from [DBName].[schema].[tablename]') 
7
Tom Stickel
select * from [Server].[database].[schema].[tablename] 

Dies ist der richtige Weg, um anzurufen. Stellen Sie sicher, dass die Server verbunden sind, bevor Sie die Abfrage ausführen.

So prüfen Sie, ob Verbindungsserver angerufen werden:

EXEC sys.sp_linkedservers 
4
select name from drsql01.test.dbo.employee
  • drslq01 ist Server mit Servernamen
  • test ist Datenbankname
  • dbo ist ein Schema-Standardschema
  • mitarbeiter ist Tabellenname

Ich hoffe, es hilft zu verstehen, wie die Abfrage für den Verbindungsserver ausgeführt wird

2
Jaspreet Singh

Bei Verbindungsservern sollten normalerweise keine direkten Abfragen verwendet werden, da die temporäre Datenbank des SQL-Servers stark verwendet wird. Im ersten Schritt werden Daten in die temporäre Datenbank abgerufen, und es erfolgt eine Filterung. Es gibt viele Fäden darüber. Es ist besser, open OPENQUERY zu verwenden, da es SQL an den Quellverbindungsserver übergibt und dann gefilterte Ergebnisse zurückgibt, z.

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

Folgende Abfrage funktioniert am besten.

Versuchen Sie diese Abfrage:

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

Es hilft sehr, MySQL mit MS SQL zu verknüpfen

1
Vijay S

Für das, was es wert ist, habe ich die folgende Syntax gefunden, um am besten zu funktionieren:

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

Ich konnte die Empfehlungen anderer nicht verwenden, indem ich den Datenbanknamen verwendete. Darüber hinaus hat diese Datenquelle kein Schema.

0
Sean Warren

klicken Sie mit der rechten Maustaste auf eine Tabelle und klicken Sie als Auswahl auf die Skripttabelle

 enter image description here

0
Shimon Doodkin