435 Stimmen

Die Auswahl von Daten aus zwei verschiedenen Servern in SQL Server

Wie kann ich Daten in derselben Abfrage aus zwei verschiedenen Datenbanken, die auf zwei verschiedenen Servern in SQL Server liegen, auswählen?

8 Stimmen

Die Antworten von Eric und Raging Bull waren sehr hilfreich. Ich konnte dies verwenden, um große Datenmengen von DEV nach PROD zu kopieren und die Zeiten von 5 Stunden bis 18 Stunden auf 17 Sekunden zu reduzieren.

0 Stimmen

@Eric, Lob für die Bearbeitung einer etwas mehrdeutigen Frage und daraus eine 170-Reputationsfrage zu machen :)

18voto

Anna Karthi Punkte 223

Probieren Sie dies aus:

SELECT * FROM OPENROWSET('SQLNCLI','Server=IHR SERVER;Trusted_Connection=yes;','SELECT * FROM Tabelle1') AS a
UNION
SELECT * FROM OPENROWSET('SQLNCLI','Server=ANDERER SERVER;Trusted_Connection=yes;','SELECT * FROM Tabelle1') AS a

15voto

MarcM Punkte 1912

Ich hatte das gleiche Problem, eine SQL_Server 2008 mit einem SQL_Server 2016 zu verbinden, der auf einem entfernten Server gehostet wird. Andere Antworten haben bei mir nicht direkt funktioniert. Ich schreibe meine angepasste Lösung hier auf, da ich denke, dass sie für jemand anderen nützlich sein könnte.

Eine erweiterte Antwort für Verbindungen zu entfernten IP-Datenbanken:

Schritt 1: Server verbinden

EXEC sp_addlinkedserver @server='SRV_NAME',
   @srvproduct=N'',
   @provider=N'SQLNCLI',   
   @datasrc=N'aaa.bbb.ccc.ddd';

EXEC sp_addlinkedsrvlogin 'SRV_NAME', 'false', NULL, 'dein_remote_db_login_user', 'dein_remote_db_login_password'

...wobei SRV_NAME ein erfundener Name ist. Wir werden ihn verwenden, um auf den entfernten Server in unseren Abfragen zu verweisen. aaa.bbb.ccc.ddd ist die IP-Adresse des entfernten Servers, auf dem Ihre SQLserver-DB gehostet wird.

Schritt 2: Führen Sie Ihre Abfragen aus Zum Beispiel:

SELECT * FROM [SRV_NAME].dein_remote_db_name.dbo.deine_tabelle

...und das war's!

Syntaxdetails: sp_addlinkedserver und sp_addlinkedsrvlogin

6voto

user3586922 Punkte 59

Server 2008:

Wenn Sie in SSMS mit server1.DB1 verbunden sind und Folgendes versuchen:

SELECT * FROM
[server2].[DB2].[dbo].[table1]

wie andere bemerkt haben, wenn es nicht funktioniert, liegt es daran, dass der Server nicht verbunden ist.

Ich erhalte den Fehler:

Server DB2 konnte nicht in sys.servers gefunden werden. Stellen Sie sicher, dass der richtige Servername angegeben wurde. Führen Sie bei Bedarf den gespeicherten Prozess sp_addlinkedserver aus, um den Server zu sys.servers hinzuzufügen.

Um den Server hinzuzufügen:

Verweis: Server mit sp_addlinkedserver hinzufügen Link: [1]: Server mit sp_addlinkedserver hinzufügen

Um zu sehen, was in Ihren sys.servers enthalten ist, fragen Sie einfach danach:

SELECT * FROM [sys].[servers]

6voto

irfandar Punkte 1540

Vereinfachte Lösung für das Hinzufügen von verknüpften Servern

Erster Server

EXEC sp_addlinkedserver @server='ip,port\instancename'

Zweiter Login

EXEC sp_addlinkedsrvlogin 'ip,port\instancename', 'false', NULL, 'remote_db_loginname', 'remote_db_pass'

Ausführen von Abfragen vom verknüpften zum lokalen DB

INSERT INTO Tbl (Col1, Col2, Col3)
SELECT Col1, Col2, Col3
FROM [ip,port\instancename].[linkedDBName].[linkedTblSchema].[linkedTblName]

4voto

RBarryYoung Punkte 53364

Habe eine Linked-Server-Definition in einem Server für den anderen erstellt (dafür benötigen Sie SA), und dann einfach mit 4-Teil-Namen darauf verwiesen (siehe BOL).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X