Wie kann ich Daten in derselben Abfrage aus zwei verschiedenen Datenbanken, die auf zwei verschiedenen Servern in SQL Server liegen, auswählen?
Antworten
Zu viele Anzeigen?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
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]
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]
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 :)