MSSQL : Tabelle in sich selbst duplizieren

GerJoHo

Grünschnabel
Moin, Moin,

ich möchte folgendes machen : Eine Tabelle in sich selbst nach Auswahlregeln duplizieren, ohne direkte Addressierung der Einzelspalten. Zur Veranschaulichung zwei Beispiele (Die realen Probleme sehen ganz anders aus, wobei alle anderen Schritte gelöst sind und daher statt der realen Probleme zwei gut nachvollziehbare)

(1) Artikeldatenbank Weihnachtsmann (Tabelle WMan)
ID Jahr Farbe Größe Breite Gewicht etc.
1 1995 blau 10 cm ....
2 1995 blau 15 cm ....
3 1995 rot 3 cm ....
4 1996 blau 11 cm ...
......
50 2004 blau 13 cm


Im Jahr 2005 war der Hersteller etwas phantasieloser und hat die Modelle von 1995 identisch wideraufgelegt, aber nun statt in blau in gelb.
ID Jahr Farbe Größe Breite Gewicht etc.
1 1995 blau 10 cm ....
2 1995 blau 15 cm ....
3 1995 rot 3 cm ....
4 1996 blau 11 cm ...
......
50 2004 blau 13 cm
51 2005 gelb 10 cm ....
52 2005 gelb 15 cm ....
53 2005 rot 3 cm ....

Da ich nun nicht alle anderen Abmaße neu eingeben möchte, dachte ich an folgendes

(I) Duplizieren
INSERT INTO Wman
SELECT *
FROM WMan
WHERE Wman.Jahr = 1995

(II) Modifizieren
UPDATE WMan
SET Wman.Jahr = 2005
(+Zusatz, damit nicht auch die alten Daten umgeschrieben werden)

UPDATE WMan
SET WMan.Farbe = 'gelb'
WHERE WMan.Farbe = 'blau'

Aber das Duplizieren ist von MSSQL durch Selbstverweisung nicht erlaubt - wie geht es sonst. Ich habe mir dann überlegt, ich kopiere den neuen Datensatz in eine neue Tabelle und baue sie zurück ein, was aber wegen der Identity nicht klappt (=> Siehe meinen ersten Thread in diesem Forum.) - hat dazu jemand eine Idee ?

(2) Die zweite Form der Duplikation ist etwas wie folgt : Ein Überweisung von Konto A nach Konto B.

ID Betrag RTag 4.Spalte weitere Spalten
.....
37 100,00 1.1.2001 Überweisung
.....
100 irgendetwas

Dummerweise wurden durch die Überweisung zwei Käufe abgedeckt und ich möchte nun diesen Eintrag modifizieren in :

Tabelle = Konto
ID Betrag RTag 4.Spalte und weitere Spalten
37 50,00 1.1.2001 Überweisung Miete
.....
100 irgendetwas
101 50,00 1.1.2001 Überweisung Nebenkosten

Auch hier möchte ich wegen der anderen Spalten eine Kopie durchführen unter Beibehaltung aller anderen Spalten

(I) Duplizieren
INSERT INTO Konto
SELECT *
FROM Konto
WHERE Konto ..........

(II) Modifizieren
........

Und nun tritt wieder dasselbe Problem wie oben auf. Wie gesagt, wenn ich die Spalten direkt einzeln Anspreche, dann findet sich eine Lösung .... aber wenn z.B. nur eine weitere Spalte in die Datenbank hinzukommen würde, dann müßte ich auch hier die Routine ändern. Nur ich habe die Datenbank nocht programmiert und habe keinen Schimmer, wie sich die Datenbank weiterentwickelt, nur dass die Spalten, die manipulieren möchte erhalten bleiben werden.

Ich habe jetzt schon x-Foren durchsucht - und beide Probleme werden gelegentlich aufgeworfen aber nie findet sich eine Antwort (wenn man von der spaltenadressierten Lösung absieht, die hier explizit nicht hilft, und auch den damaligen Schreibern nie geholfen hat).
 
Zurück