AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Master-Detail Tabellensätze klonen [Denksportaufgabe]
Thema durchsuchen
Ansicht
Themen-Optionen

Master-Detail Tabellensätze klonen [Denksportaufgabe]

Ein Thema von alzaimar · begonnen am 5. Okt 2005 · letzter Beitrag vom 7. Okt 2005
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Master-Detail Tabellensätze klonen [Denksportaufgabe]

  Alt 5. Okt 2005, 16:17
Datenbank: MSSQL • Version: 2000 • Zugriff über: egal
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:
ID Name Eigenschaft
1  Fritz  1
2  Franz  2
3  Hubert 2
Die Detailtabelle sei (ID-Spalte wieder ein Identity-Wert, Verknüpfung über Detail.MasterID --> Master.ID):
Code:
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
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.
Das Resultat wäre dann:
MASTER
Code:
ID Name Eigenschaft
1 Fritz   1
2 Franz   2
3 Hubert  2
4 Franz   2
5 Hubert  2
DETAIL:
Code:
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
Die IDs der geklonten Einträge ist egal, Hauptsache die Referenzen sind korrekt.

Ich habe eine Lösung, die allerdings in der Master-Tabelle eine Hilfsspalte verwendet ('Clone'). Geht es auch ohne? Gibt es Optimierungsmöglichkeiten?
Angehängte Dateien
Dateityp: txt sample-solution_208.txt (1,5 KB, 15x aufgerufen)
Dateityp: txt createsampletables_663.txt (1,1 KB, 9x aufgerufen)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Master-Detail Tabellensätze klonen [Denksportaufgabe]

  Alt 6. Okt 2005, 22:59
Nu pusht der Alz.
Es tobt der Sall
und ruft
"Das Ganze noch einmal!"
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Master-Detail Tabellensätze klonen [Denksportaufgabe]

  Alt 7. Okt 2005, 13:11
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:
...
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
...
Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz