Frage von mymomo, 32

[SQL] - Tabelle aus einer Datenbank in eine andere Datenbank kopieren?

Moin! Ich benötige dringend mal Hilfe...

Ich habe hier zwei identische Datenbanken (von der Struktur her). Die eine Datenbank ist eine alte Sicherung, die andere Datenbank ist aktuell.

Nun wurden aus der aktuellen Datenbank Personalstammsätze gelöscht, welche in der alten Sicherung aber vorhanden sind.

Jetzt würde ich gerne den Inhalt der Tabelle "Personal" der Sicherungs-DB in die aktuelle DB kopieren wollen. Es sollen aber nicht vorhandene Datensätze überschrieben werden, sondern nur fehlende hinzuergänzt werden.

Beispiel: Die aktuelle DB beinhaltet folgende Personallaufnummer: 100, 102

Die Sicherungs-DB hat folgenden Inhalt: 100, 101, 102

In die aktuelle DB soll also nur der fehlende Stammsatz mit der Personalnummer 101 kopiert werden, die vorhandenen Stammsätze sollen unberührt bleiben.

Welche Stammsätze genau fehlen ist nicht im Einzelnen bekannt - es sind mehrere 1000 Datensätze.

Kann wer helfen?

Antwort
von Graphitiboy, 14

Blöde Idee. Ignoriere das mal lieber. Sorry und danke.

Antwort
von IChri5I, 23

Selektier dir auf der aktuellen Datenbank alle Einträge und erstell eine Liste.

Diese Liste nimmst du und erstellst eine Selektion auf der Backup DB mit der du sagst zeig mir alle an die nicht in der Liste enthalten sind.

Das Ergebnis sind die fehlenden Einträge die du per Insert dann in die Tabelle schreiben kannst.

Kommentar von mymomo ,

Klingt logisch, leider fehlt mir die Kenntnis des Umsetzens. Kannst du mir hier eine abstrakte Abfrage zeigen?

Die Spalte "Personalnummer" ist die UID. Die Tabelle lautete "Personal". Die beiden Datenbanken heißen "backup" und "aktuell"

Kommentar von IChri5I ,

Auf die schnelle mal zusammen geschustert.

Zum Selektieren z.B.:

select aktuell.personalnummer from aktuell.personal

(Dann bekommste die Liste)

select backup.personalnummer form backup.personal
where backup.personalnummer not in (hier das Ergebnis der Liste z.B. 101,103,104,110)

(Dann haste die ganzen fehlenden Einträge)

Für den Insert dann

insert into aktuell.personal
(personalnummer, feld2, feld3)
Values
(101, feld2, feld3)

wie gesagt gibt bestimmt noch bessere Methoden und ist nur auf die schnelle.

PS: Den Zugriff auf die Datenbank würde ich nicht rausgeben.

Antwort
von LeCux, 26

Importieren in eine temporäre Tabelle und dann ein SELECT INTO:


SELECT *
INTO CustomersBackup2013
FROM Customers
WHERE Country='Germany';

Wenn eindeutige IDs vorhanden ist, kann man die vor dem Kopieren mit einen "NOT IN (SELECT id ..." ausfiltern.

ABER: es gibt noch das Problem, dass evenutell Referenzen fehlen können!


Kommentar von mymomo ,

wenn ich deine Abfrage aber richtig verstehe, müsste ich ja wissen, welcher Personalstamm fehlt. Das ist nicht bekannt - und es wären auch mehrere 1000 einzeln benannte Datensätze

Kommentar von LeCux ,

Hast Du eine eindeutige ID?

Nennen wir deine in der DB befindelichen Stammdaten A und den Restore B.

Dann kannst Du mit

SELECT * FROM B WHERE id NOT IN (SELECT id FROM A)

diejenigen finden, deren ID in B ist aber NICHT in A (die gelöschte Differenz).

Ist leider u.a. mein täglich Brot. Welchen SQL Server?

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten