Patrick.Karre Geschrieben 1. März 2004 Geschrieben 1. März 2004 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
bigpoint Geschrieben 1. März 2004 Geschrieben 1. März 2004 Es bestehen mehrere Möglichkeiten, am besten erstellst du einen Verbindungsserver von dem du die Daten brauchst und dann mit Select * from Verbindungsserver.dbo.Tabelle Kannst du die Daten abrufen usw.
Patrick.Karre Geschrieben 1. März 2004 Autor Geschrieben 1. März 2004 Und in diesen Verbindungserver einfach die Tabellen Verknüpfen ? Ich habe probiert die Datenbanken direkt anzusprechen (datenbank-test1.dbo.Tabelle) aber das hat nicht geklappt. Gruß Patrick
bigpoint Geschrieben 1. März 2004 Geschrieben 1. März 2004 Nein , also du arbeitest mit MS SQL Server à richtig ??
Patrick.Karre Geschrieben 1. März 2004 Autor Geschrieben 1. März 2004 Ja. Sorry hätte ich erwähnen müssen. Ich arbeite mit dem MS-SQL-Server 2000.
just_me Geschrieben 1. März 2004 Geschrieben 1. März 2004 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.
bigpoint Geschrieben 1. März 2004 Geschrieben 1. März 2004 Und der andere Datenbank ist auch SQL Server 2000 ??? Dan Enterprise Manager -> Datenbanken -> Dein DB -> Sicherheit ->Verbindungsserver ->( Rechte Maustaste )Neuen Verbindungsserver -> Dein Verbindungsserver ->Server Typ ( SQL Server )
bigpoint Geschrieben 1. März 2004 Geschrieben 1. März 2004 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
Patrick.Karre Geschrieben 1. März 2004 Autor Geschrieben 1. März 2004 Danke, werde mich gleich mal dran machen. Beide Datenbanken befinden sich auf einem MS-SQL Server. Die eine Datenbank ist eine Adressverwaltung die andere eine Warenwirtschaft. Die Adressverwaltung soll mit Daten aus der warenwirtschaft gefüllt werden. Gruß Patrick
Patrick.Karre Geschrieben 2. März 2004 Autor Geschrieben 2. März 2004 Noch eine kleine Frage zu dem Thema, hast du ein Beispiel Statement für mich, wie so eine Update-Funktion aussehen könnte ? Gruß Patrick
just_me Geschrieben 2. März 2004 Geschrieben 2. März 2004 @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 einrichtenYep, 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.
just_me Geschrieben 2. März 2004 Geschrieben 2. März 2004 Beide Datenbanken befinden sich auf einem MS-SQL Server. ouch. my fault, sorry. Versuch's doch mal mit dem bereits vorgeschlagenenSELECT * FROM [Datenbankname].[Besitzer].[Tabellenname], [Datenbankname].[Besitzer].[Tabellenname]Natürlich musst du in beiden Datenbanken über entsprechende Berechtigungen verfügen.
Patrick.Karre Geschrieben 4. März 2004 Autor Geschrieben 4. März 2004 Ja, danke, hat funktioniert. Gruß Patrick
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden