Discussion:
SQL-Abfrage von zwei Servern
(zu alt für eine Antwort)
friedhelm beckadolf
2005-06-07 17:53:17 UTC
Permalink
Hallo werte NG'ler,

ich habe auf zwei Servern 'S1' und 'S2' zwei unterschiedliche Datenbanken,
nämlich 'D1' und 'D2'.
In S1.D1 gibt es in der Tabelle 'T1' ein Feld mit dem Namen 'Kennzeichen'
In S2.D2 gibt es in der Tabelle 'T2' ein Feld mit dem namen 'feld4'.
'Kennzeichen' und 'feld4' haben eigentlich den gleichen Inhalt.
Da in 'Kennzeichen' einige falsche Einträge stehen, möchte ich diese Felder
durch die Einträge aus 'feld4' ersetzen.

Zwei Fragen:
1. Wie kann ich die beiden Server verbinden ?
2. Wie muss ich die Abfrage bzw. die update-Anweisung gestalten?

Werden jden Tipp, für den ich schon jetzt Dank sage, testen und anschließend
berichten

Grüße aus Alsdorf
Friedhelm
Elmar Boye
2005-06-07 20:54:49 UTC
Permalink
Hallo Friedhelm,
Post by friedhelm beckadolf
ich habe auf zwei Servern 'S1' und 'S2' zwei unterschiedliche
Datenbanken, nämlich 'D1' und 'D2'.
In S1.D1 gibt es in der Tabelle 'T1' ein Feld mit dem Namen
'Kennzeichen' In S2.D2 gibt es in der Tabelle 'T2' ein Feld mit dem
namen 'feld4'. 'Kennzeichen' und 'feld4' haben eigentlich den
gleichen Inhalt.
Da in 'Kennzeichen' einige falsche Einträge stehen, möchte ich diese
Felder durch die Einträge aus 'feld4' ersetzen.
1. Wie kann ich die beiden Server verbinden ?
via Verbindungsserver, siehe SQL Server Dokumentation, speziell
zu sp_addlinkedserver. Alternativ gehts für einmalige Sachen auch
via OPENDATASOURCE, OPENROWSET.
Post by friedhelm beckadolf
2. Wie muss ich die Abfrage bzw. die update-Anweisung gestalten?
UPDATE S1.D1.dbo.T1
SET Kennzeichen = T2.feld
FROM S1.D1.dbo.T1
INNER JOIN S2.D2.dbo.T2
ON T1.PK = T2.PK -- die PK Spalte(n) der Tabellen.
WHERE T1.Kennzeichen <> T2.feld

(auf dem ausführenden Server kannst Du Server und ggf Datenbank
weglassen)
Beachte das dafür MS DTC auf beiden Servern laufen muss,
da es sich dabei um eine verteilte Transaktion handelt.
Mehr dazu siehe verteilte Transaktionen in der Dokumentation.

Gruss
Elmar
Frank Eichele
2005-06-08 09:27:02 UTC
Permalink
Hallo Elmar,

ich hänge im Moment an einem ähnlichen Problem was mich noch die letzten
Nerven kostet. Ich habe einen linked Server auf dem ich eine ganz einfache
verteilte Transaktion ausführen möchte. Ich setzte den Befehl lokal Begin
Distributed Trans ab, klappt wunderbar. Setze ich dann das Select Statement
ab kommt der berühmte Fehler 7391. Ich habe die ganze Dokumentation schon
durch, ich kann einfach nichts finden. DTC läuft auf beiden Server, übrigens
2k3 und SQL 2000 Enterprise. Stelle ich das Select Statement alleine ohne
Begin... ab funktioniert es. Fällt Dir dazu vielleicht noch etwas ein?
Viele Grüße, Frank
Post by Elmar Boye
Hallo Friedhelm,
Post by friedhelm beckadolf
ich habe auf zwei Servern 'S1' und 'S2' zwei unterschiedliche
Datenbanken, nämlich 'D1' und 'D2'.
In S1.D1 gibt es in der Tabelle 'T1' ein Feld mit dem Namen
'Kennzeichen' In S2.D2 gibt es in der Tabelle 'T2' ein Feld mit dem
namen 'feld4'. 'Kennzeichen' und 'feld4' haben eigentlich den
gleichen Inhalt.
Da in 'Kennzeichen' einige falsche Einträge stehen, möchte ich diese
Felder durch die Einträge aus 'feld4' ersetzen.
1. Wie kann ich die beiden Server verbinden ?
via Verbindungsserver, siehe SQL Server Dokumentation, speziell
zu sp_addlinkedserver. Alternativ gehts für einmalige Sachen auch
via OPENDATASOURCE, OPENROWSET.
Post by friedhelm beckadolf
2. Wie muss ich die Abfrage bzw. die update-Anweisung gestalten?
UPDATE S1.D1.dbo.T1
SET Kennzeichen = T2.feld
FROM S1.D1.dbo.T1
INNER JOIN S2.D2.dbo.T2
ON T1.PK = T2.PK -- die PK Spalte(n) der Tabellen.
WHERE T1.Kennzeichen <> T2.feld
(auf dem ausführenden Server kannst Du Server und ggf Datenbank
weglassen)
Beachte das dafür MS DTC auf beiden Servern laufen muss,
da es sich dabei um eine verteilte Transaktion handelt.
Mehr dazu siehe verteilte Transaktionen in der Dokumentation.
Gruss
Elmar
Elmar Boye
2005-06-08 15:49:17 UTC
Permalink
Hallo Frank,
Post by Frank Eichele
ich hänge im Moment an einem ähnlichen Problem was mich noch die
letzten Nerven kostet.
ich habe mich mal an den Original-Thread gehängt.

Gruss
Elmar

Loading...