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?Wonach du suchst, sind Linked Server. Du kannst sie in SSMS unter folgendem Pfad im Baum des Objekt-Explorers finden:
Server Objects-->Linked Servers
oder du kannst sp_addlinkedserver verwenden.
Du musst nur einen einrichten. Sobald du das gemacht hast, kannst du eine Tabelle auf dem anderen Server wie folgt aufrufen:
select
*
from
LocalTable,
[OtherServerName].[OtherDB].[dbo].[OtherTable]
Beachte, dass der Besitzer nicht immer dbo
ist, also achte darauf, es mit dem verwendeten Schema zu ersetzen.
Sie können dies mit Linked Servern tun.
Typischerweise sind Linked Server so konfiguriert, dass die Database Engine eine Transact-SQL-Anweisung ausführen kann, die Tabellen in einer anderen Instanz von SQL Server oder einem anderen Datenbankprodukt wie Oracle enthält. Viele Arten von OLE DB-Datenquellen können als Linked Server konfiguriert werden, einschließlich Microsoft Access und Excel.
Linked Server bieten folgende Vorteile:
- Die Möglichkeit, auf Daten außerhalb von SQL Server zuzugreifen.
- Die Fähigkeit, verteilte Abfragen, Updates, Befehle und Transaktionen auf heterogenen Datenquellen im gesamten Unternehmen auszuführen.
- Die Fähigkeit, unterschiedliche Datenquellen ähnlich anzusprechen.
Erfahren Sie mehr über Linked Servers.
Befolgen Sie diese Schritte, um einen Linked Server zu erstellen:
-
Serverobjekte -> Verknüpfte Server -> Neuer verknüpfter Server
-
Geben Sie den Remote-Servernamen an.
-
Wählen Sie den Remoteservertyp aus (SQL Server oder Andere).
-
Wählen Sie Sicherheit -> Verwendung dieses Sicherheitskontextes zulassen und geben Sie Anmeldeinformationen und Passwort des Remote-Servers an.
-
Klicken Sie auf OK und Sie sind fertig !!
Hier finden Sie ein einfaches Tutorial zur Erstellung eines Linked Servers.
ODER
Sie können einen Linked Server mit einer Abfrage hinzufügen.
Syntax:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
Erfahren Sie mehr über sp_addlinkedserver.
Sie müssen den Linked Server nur einmal erstellen. Nach dem Erstellen des Linked Servers können wir darauf wie folgt abfragen:
select * from LinkedServerName.DatabaseName.OwnerName.TableName
Das sind alles gute Antworten, aber diese fehlt und sie hat ihre eigenen starken Anwendungen. Möglicherweise entspricht sie nicht dem, was der OP wollte, aber die Frage war vage und ich denke, andere könnten hierher finden. Im Grunde können Sie ein Fenster verwenden, um gleichzeitig eine Abfrage gegen mehrere Server auszuführen, so geht's:
Öffnen Sie in SSMS die Registrierten Server und erstellen Sie eine Neue Servergruppe unter Lokale Servergruppen.
Erstellen Sie unter dieser Gruppe eine Neue Serverregistrierung für jeden Server, den Sie abfragen möchten. Wenn die DB-Namen unterschiedlich sind, stellen Sie sicher, dass Sie für jeden im Eigenschaftenmenü einen Standardwert setzen.
Gehen Sie nun zurück zur Gruppe, die Sie im ersten Schritt erstellt haben, klicken Sie mit der rechten Maustaste und wählen Sie Neue Abfrage. Ein neues Abfragefenster wird geöffnet und jede Abfrage, die Sie ausführen, wird auf jedem Server in der Gruppe ausgeführt. Die Ergebnisse werden in einem einzelnen Datensatz mit einer zusätzlichen Spaltenbezeichnung präsentiert, die anzeigt, von welchem Server der Datensatz stammt. Wenn Sie die Statusleiste verwenden, werden Sie feststellen, dass der Servername durch mehrere ersetzt wird.
Die Abfrage über 2 verschiedene Datenbanken hinweg ist eine verteilte Abfrage. Hier ist eine Liste einiger Techniken sowie Vor- und Nachteile:
- Verknüpfte Server: Ermöglichen den Zugriff auf eine breitere Palette von Datenquellen als die SQL Server Replikation bietet
- Verknüpfte Server: Verbinden sich mit Datenquellen, die von der Replikation nicht unterstützt werden oder die einen Ad-hoc-Zugriff erfordern
- Verknüpfte Server: Funktionieren besser als OPENDATASOURCE oder OPENROWSET
- OPENDATASOURCE und OPENROWSET Funktionen: Bequem für das Abrufen von Daten aus Datenquellen auf Ad-hoc-Basis. OPENROWSET hat auch BULK-Einrichtungen, die möglicherweise eine Formatdatei erfordern, was etwas umständlich sein könnte
- OPENQUERY: Unterstützt keine Variablen
- Alle sind T-SQL-Lösungen. Relativ einfach zu implementieren und einzurichten
- Alle sind abhängig von der Verbindung zwischen Quelle und Ziel, was die Leistung und Skalierbarkeit beeinflussen könnte
- See previous answers
- Weitere Antworten anzeigen
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 :)