[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?
2 Antworten
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.
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.
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!
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
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?
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"