Zum Inhalt springen

Kreuzabfrage auf zwei Datenbanken (MS-SQL)


Patrick.Karre

Empfohlene Beiträge

Hallo,

ich möchte ein Update-Statement auf eine Datenbank durchführen. Die Daten die durch das Update-Statement eingetragen werden sollen, kommen von einer anderen Datenbank. Wie ich Innerhalb einer Datenbank die Daten bekomme, ist mir klar, aber wie bekomme ich die Daten aus einer anderen Datenbank ?

Gruß

Patrick

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Frage ist, wie oft du diese Daten brauchst.

Für einmalige oder seltene ("Selten" meint weniger als einige hundert Mal/Tag) Abfragen, oder Abfragen, die nur wenige Resultate zurückgeben, ist es denkbar negativ für die Server- und Netzwerkauslastung, wenn du einen statischen Verbindungsserver einrichtest.

Hier sind die pass-through-statements (s. OPENQUERY) oder die ad-hoc-Variante (s. OPENROWSET) wesentlich effektiver.

Schau dir einfach mal die Onlinedokumentation (Stichwort: Verteilte Abfragen) an.

Dort findest du auch ausgezeichnete Beispiele, wie der genaue Syntax für die entsprechenden Anforderungen lautet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von just_me

Die Frage ist, wie oft du diese Daten brauchst.

Für einmalige oder seltene ("Selten" meint weniger als einige hundert Mal/Tag) Abfragen, oder Abfragen, die nur wenige Resultate zurückgeben, ist es denkbar negativ für die Server- und Netzwerkauslastung, wenn du einen statischen Verbindungsserver einrichtest.

Hier sind die pass-through-statements (s. OPENQUERY) oder die ad-hoc-Variante (s. OPENROWSET) wesentlich effektiver.

Schau dir einfach mal die Onlinedokumentation (Stichwort: Verteilte Abfragen) an.

Dort findest du auch ausgezeichnete Beispiele, wie der genaue Syntax für die entsprechenden Anforderungen lautet.

also für OPENQUERY muß man auch einen Verbindungsserver einrichten

OPENROWSET sollte aber ok sein ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Patrick.Karre

Quelle: Onlinedokumentation MS SQL Server, Stichwort: OPENROWSET

USE pubs

GO

SELECT a.*

FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass',

'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname') AS a

GO

Quelle: Onlinedokumentation MS SQL Server, Stichwort: OPENQUERY

-- Verbindungsserver einrichten

EXEC sp_addlinkedserver 'OracleSvr',

'Oracle 7.3',

'MSDAORA',

'ORCLDB'

GO

-- Abfragen realisieren

SELECT *

FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM joe.titles')

GO

-- Verbindungsserver trennen

EXEC sp_dropserver 'OracleSvr'

GO

@bigpoint

also für OPENQUERY muß man auch einen Verbindungsserver einrichten
Yep, fein beobachtet. ;)

Der - alles tragende - Unterschied ist jedoch, dass die Verbindung zu diesen Servern nicht statisch gehalten werden muss. Somit ist eine Lastbeschränkung möglich, ohne Datenfragmentierung und/oder andere Folgeerscheinungen in Kauf nehmen zu müssen.

Während man also für gewöhnlich OPENROWSET verwendet, wenn einmalige oder sehr seltene Abfragen erfolgen, wird man üblicherweise zu OPENQUERY greifen, sobald eine Reihe von Aufträgen kontrolliert ausgeführt werden sollen, die über einen definierten Start- und Endzeitpunkt verfügen.

Sinn machen statische Verbindungsserver bespielsweise, wenn "echte" verteilte Systeme existieren, die es erforderlich machen, dass nicht deterministische Datenmengen über nicht deterministische Zeiträume bewegt werden.

Diese Annahme, wie auch weitere entsprechende, lässt sich jedoch aus der spezifizierten Anforderung nicht erkennen. Ebenso, wie nach wie vor nicht erkennbar ist, welche der genannten Möglichkeiten nun den Idealfall darstellt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Beide Datenbanken befinden sich auf einem MS-SQL Server.

ouch. my fault, sorry.

Versuch's doch mal mit dem bereits vorgeschlagenen

SELECT * FROM [Datenbankname].[Besitzer].[Tabellenname], [Datenbankname].[Besitzer].[Tabellenname]

Natürlich musst du in beiden Datenbanken über entsprechende Berechtigungen verfügen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...