![]() |
Datenbank: MSSQL • Version: 2000 • Zugriff über: egal
Master-Detail Tabellensätze klonen [Denksportaufgabe]
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo SQL-Spezis,
Ich habe eine Aufgabe (nee, keine Hausaufgabe, schaut mal aufs Alter ;-) ). Es geht ums Duplizieren von Einträgen einer Master-Detail Beziehung. Die Lösung sollte ein SQL-Skript sein (Microsoft SQL-Server Dialekt). Cursors sind verboten (weil sie lahm sind). Gegeben sei eine Mastertabelle (die ID-Spalte ist ein Identity-Wert (also AutoInc)):
Code:
Die Detailtabelle sei (ID-Spalte wieder ein Identity-Wert, Verknüpfung über Detail.MasterID --> Master.ID):
ID Name Eigenschaft
1 Fritz 1 2 Franz 2 3 Hubert 2
Code:
Einfache Aufgabe: Klone alle Einträge (sowie die Detaileinträge) mit Eigenschaft = X. Bei X = 2 soll z.B. Franz und Hubert in der Mastertabelle und die insgesamt 7 Detaileinträge dupliziert werden.
ID MasterID Details
1 1 Fritz-1 2 1 Fritz-2 3 2 Franz-1 4 2 Franz-2 5 2 Franz-3 6 2 Franz-4 7 3 Hubert-1 8 3 Hubert-2 9 3 Hubert-3 Das Resultat wäre dann: MASTER
Code:
DETAIL:
ID Name Eigenschaft
1 Fritz 1 2 Franz 2 3 Hubert 2 4 Franz 2 5 Hubert 2
Code:
Die IDs der geklonten Einträge ist egal, Hauptsache die Referenzen sind korrekt.
ID MasterID Details
1 1 Fritz-1 2 1 Fritz-2 3 2 Franz-1 4 2 Franz-2 5 2 Franz-3 6 2 Franz-4 7 3 Hubert-1 8 3 Hubert-2 9 3 Hubert-3 10 4 Franz-1 11 4 Franz-2 12 4 Franz-3 13 4 Franz-4 14 5 Hubert-1 15 6 Hubert-2 16 6 Hubert-3 Ich habe eine Lösung, die allerdings in der Master-Tabelle eine Hilfsspalte verwendet ('Clone'). Geht es auch ohne? Gibt es Optimierungsmöglichkeiten? |
Re: Master-Detail Tabellensätze klonen [Denksportaufgabe]
Nu pusht der Alz.
Es tobt der Sall und ruft "Das Ganze noch einmal!" :party: |
Re: Master-Detail Tabellensätze klonen [Denksportaufgabe]
Hallo alzaimar,
versuchst du den Rheinländern bei der Eröffnung der fünften Jahreszeit zuvorzukommen? Ich habe mir deine Lösung angesehen, obwohl mir das Datenmodell etwas sehr synthetisch aussieht. Ganz klar brauchst du irgendwo die Information, welcher neue PK durch cloning aus welchem alten PK entstanden ist, da du sonst die details nicht nachführen kannst. Und selbstverständlich musst du später einen clone vom Original unterscheiden können. Wenn du deine master table nicht durch ein rein technisch motiviertes Attribut verunstalten willst, dann kannst du auch eine temporäre Tabelle verwenden:
SQL-Code:
Grüße vom marabu
...
create table #t (maName varchar(20) null, property int null, clone) insert into #t (maName, Property, Clone) select maName, Property, masterID from testMaster where Property = @cloneProperty ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz