Bei einem Insert einen anderen identischen Datensatz ändern
Guten Abend zusammen,
ich bin jetzt seit 2 Tagen und in Summe bestimmt 10 Stunden am recherchieren, lesen, rumfruckeln und komm nicht so richtig weiter.
Vielleicht sind meine Suchangaben zu verkorkst, so dass ich keinen Treffer finde.
Ich versuche mein Begehr hier mit Bildmaterial zu beschreiben.
In dieser Tabelle gibt es "identische" Datensätze (Artikelnummer / EAN identisch - die haben auch Bestand) aber die BEZ1 kann z.B. durch Anwender geändert werden:
Der letzte Datensatz mit der letzten Datums-/Uhrzeitangabe ist der derzeit aktive Datensatz, die anderen spielen keine Rolle mehr.
Ändert jetzt ein Anwender die BEZ1, so würde der Datensatz wieder mit dem aktuellen Zeitstempel rein geschrieben werden.
Artikelnummer, EAN .... alles identisch, nur die BEZ1 wäre dann z.B. wegen eines Buchstabendrehers geändert.
Beim INSERT des neuen Datensatzes wird Aktiv=1 gesetzt.
Jetzt das, was ich nicht hinbekomme:
Wenn jetzt also der neue Datensatz über ein INSERT hinzugefügt wird, dann soll in dieser Tabelle nachgeschaut werden ob es schon Datensätze gibt, bei denen
die Artikelnummer, EAN (beliebig skalierbar) vorhanden sind,
deren Zeitstempel kleiner/älter ist als der aktuelle INSERT-Zeitstempel und Aktiv=1 ist
Es müsste also der gelb markierte Datensatz beim INSERT erkannt werden und mit dem Insert des neuen Datensatzes das Aktiv von 1 auf 0 umgestellt werden.
Und da kommen meine kleinen grauen Zellen leider nicht weiter. Der einzige Anhaltspunkt ist, dass ich das über einen INSERT-Trigger in der Tabelle lösen wollen würde. Aber der Code ist mir nicht klar und ich dachte an sowas, was leider nicht funktioniert:
ich bin jetzt seit 2 Tagen und in Summe bestimmt 10 Stunden am recherchieren, lesen, rumfruckeln und komm nicht so richtig weiter.
Vielleicht sind meine Suchangaben zu verkorkst, so dass ich keinen Treffer finde.
Ich versuche mein Begehr hier mit Bildmaterial zu beschreiben.
In dieser Tabelle gibt es "identische" Datensätze (Artikelnummer / EAN identisch - die haben auch Bestand) aber die BEZ1 kann z.B. durch Anwender geändert werden:
Der letzte Datensatz mit der letzten Datums-/Uhrzeitangabe ist der derzeit aktive Datensatz, die anderen spielen keine Rolle mehr.
Ändert jetzt ein Anwender die BEZ1, so würde der Datensatz wieder mit dem aktuellen Zeitstempel rein geschrieben werden.
Artikelnummer, EAN .... alles identisch, nur die BEZ1 wäre dann z.B. wegen eines Buchstabendrehers geändert.
Beim INSERT des neuen Datensatzes wird Aktiv=1 gesetzt.
Jetzt das, was ich nicht hinbekomme:
Wenn jetzt also der neue Datensatz über ein INSERT hinzugefügt wird, dann soll in dieser Tabelle nachgeschaut werden ob es schon Datensätze gibt, bei denen
die Artikelnummer, EAN (beliebig skalierbar) vorhanden sind,
deren Zeitstempel kleiner/älter ist als der aktuelle INSERT-Zeitstempel und Aktiv=1 ist
Es müsste also der gelb markierte Datensatz beim INSERT erkannt werden und mit dem Insert des neuen Datensatzes das Aktiv von 1 auf 0 umgestellt werden.
Und da kommen meine kleinen grauen Zellen leider nicht weiter. Der einzige Anhaltspunkt ist, dass ich das über einen INSERT-Trigger in der Tabelle lösen wollen würde. Aber der Code ist mir nicht klar und ich dachte an sowas, was leider nicht funktioniert:
IF Exists (Select A.TETENR from ArtikelProd A , ArtikelProd B where A.DTM < B.DTM and A.Aktiv=1)
begin
Update ARTIKELPROD
Set
ARTIKELPROD.AKTIV = '0'
end
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 641006
Url: https://administrator.de/contentid/641006
Ausgedruckt am: 22.11.2024 um 07:11 Uhr
3 Kommentare
Neuester Kommentar
Moin,
Mit einem Statement wird das nichts.
Mach dich (mit einen Transact) zunächst das Update auf den später obsolet werdenden Datensatz.
Danach dein Insert Statement.
Wenn dein Insert fehlschlägst, dann das Update wieder rückgängig machen.
Hilfe findest du z.B. hier...
https://stackoverflow.com/questions/2238881/sql-query-thatll-rollback-if ...
Gruß
em-pie
Mit einem Statement wird das nichts.
Mach dich (mit einen Transact) zunächst das Update auf den später obsolet werdenden Datensatz.
Danach dein Insert Statement.
Wenn dein Insert fehlschlägst, dann das Update wieder rückgängig machen.
Hilfe findest du z.B. hier...
https://stackoverflow.com/questions/2238881/sql-query-thatll-rollback-if ...
Gruß
em-pie