Daten aus einem Feld einer Tabelle einer Datenbank in ein Feld einer Tabelle ein anderen Datenbak ko

pedroNegro

Benutzer
Beiträge
5
hiilfe,

ich versuche die Inhalte einer Spalte einer Tabelle einer DB in eine Spalte einer anderen Tabelle in einer anderen Datenbak zu kopieren oder auch exportieren.
Habe schon zwei Lösungsansätze verfolgt:
1.
Insert INTO [Tabellename1] (Spaltenname1) SELECT Spaltenname2 FROM [Datenbank2].dbo.[Tabellenname2]
WHERE (ID) = [Datenbank2].dbo.[Tabellenname2].ID

2.
UPDATE [Tabellename1]
SET (Spaltenname1) = [Datenbank2].dbo.[Tabellenname2].Spaltenname2
WHERE (ID) = [Datenbank2].dbo.[Tabellenname2].ID

Das Kopieren soll einmalig sein.

Danke vorab.
 
Werbung:
Hallo pedroNegro,

da du IDs vergleichst sind schon Daten in beiden Datenbanken vorhanden.

Wenn die IDs in beiden Tabellen nich 100% übereinstimmen musst Du mit beiden Befehlen arbeiten.
Dabei solltest Du aber beim INSERT das komplette Tupel aus Datenbank1 einfügen.
Das INSERT muss dann nur IDs einfügen die noch nicht vorhanden sind.

WHERE tbl1.spalte1 NOT IN (SELECT Spalte2 FROM db2.tbl2).

Wenn Du nur die vorhandenen Tupel aktualisieren willst reicht ein UPDATE.

Der Standard würde noch MERGE INTO erlauben. Das wird, soweit ich weis, aber nicht von mySQL unterstützt.

Gruß Charly
 
Hi Charly,

vielen dank für Deine Antwort.
Ich habe mich da etwas falsch ausgedrückt. Es handelt sich nicht um die ID, das war nur exemplarisch und deshalb leicht missverständlich. Das gebe ich zu.

Gemeint ist das Kopieren der Inhalte von Tb2 auf der Db2 in die Tb1 auf Db1 unter Berücksichtigung der Werte in der Spalte3 (welche in beiden Tabellen auf beiden DB mit identischen Werten existiert)

Insert INTO [Tb1] (Spalten1) SELECT Spalten2 FROM [Db2].dbo.[Tb2]
WHERE (Spalte3) = [Db2].dbo.[Tb2].Spalte3

Hast Du noch eine Idee?
 
Insert ist nur dafür gedacht neue Zeilen in eine Tabelle einzufügen.

Du musst bei vorhandenen Zeilen immer mit Update arbeiten.

Wo die Tabellen liegen ist erstmal egal.

Code:
UPDATE Tb1
SET Spalte1 = (
   SELECT Tb2.Spalte2 FROM Tb2
   WHERE Tb2.Spalte3 = Tb1.Spalte3)

Hierbei wird für jede Zeile in Tb1 geprüft ob eine entsprechende Zeile in Tb2 vorhanden ist (Vergleich der Spalte3)
und bei einem positiven Ergebnis Tb1.Spalte1 aktualisiert (Die Unterabfrage gibt einen Wert zurück).
Tb2.Spalte3 sollte bei dieser Variante eindeutig sein.

Gruß Charly
 
Moin,
danke Charly, war am Freitag leider schon im Wochenende.

Die beiden Tabellen liegen in unterschiedlichen Datenbanken auf einem DB Server.

Folgendes habe ich probiert:

Code:
UPDATE Tb1
SET Spalte1 = [
SELECT Tb2.Spalte 2 from [Db2].dbo.[Tb2]
WHERE [Db2].dbo.[Tb2].Spalte3 = Tb1.Spalte3

Fehlermeldung: Syntax Fehler in der Nähe von Spalte3
 
Werbung:
Hallo Charly,

ich habs:

Code:
UPDATE Db1.dbo.Tb1
SET Spalte1=Spalte2
FROM Db2.dbo.Tb2 a, Db1.dbo.Tb1 r
WHERE a.Spalte3 = r.Spalte3

Hinzu kommt noch, dass die Sortierreihenfolgen (COLLATE) unterschiedlich waren.
Jetzt funzt es aber.

Nochmal vielen Dank und bis demnächst.
Gruß, pedro
 
Zurück
Oben