Firebird | UPDATE Statement | für jede Reihe +1 | also Column1 = (1, 2, 3)

  • C#
  • .NET (FX) 4.5–4.8

    Firebird | UPDATE Statement | für jede Reihe +1 | also Column1 = (1, 2, 3)

    Moin Leute,

    ich habe ein altes Progamm bekommen, das ich auf den neusten Stand bringen soll, nun habe ich da ein Problem, das ich nicht lösen kann und bitte um eure Unterstützung.
    Normalerweise arbeite ich mit C#, aber nun muss ich mit Object Pascal rumschlagen.

    Ich habe eine Tabelle, die eine Spalte mit den Namen "Ordnung" hat. Diese Spalte wird genutz um die Reihen zu ordnen.
    Ich möchte mit einer einzige Query (falls möglich), die Spalte "Ordnung" für jede Zeile einen Wert dazurechnen (wie Count).

    Table before update

    Spoiler anzeigen
    IDValue1Value2Value3Ordnung
    1ABC0
    2ABC0
    3ABC0
    4ABC0



    Table after update
    Spoiler anzeigen
    IDValue1Value2Value3Ordnung
    1ABC1
    2ABC2
    3ABC3
    4ABC4



    Meine Vorstellung
    Spoiler anzeigen

    Vielleicht mit den Trigger und Generatoren zu arbeiten. Ich weiß, aber nicht ob es möglich ist in der Query mit den Trigger und Generatoren zu arbeiten.

    Was nicht funktionier hat

    SQL-Abfrage

    1. Update table SET Ordnung = Ordnung + 1 WHERE Value = 'A' ORDER BY Value




    Das Programm
    Spoiler anzeigen

    In Delphi gibt es eine Funktion die sehr langsam läuft. Diese Funktion läuft mit einer schleife. Desto mehr Zeile ich habe in einer Tabelle, desto länger dauert es bis eine Zeile hinzugefügt wird.
    Ab 50 Zeilen dauert es schon mal 2 sek.

    Ich habe schon eine andere Schleife mit einer einzige Query gelöst (Insert und Select). Dann hat es statt 5 min .... einfach 1,5 Sekunden gedauert.




    *Elerdigt*

    Für google falls jemand auch das Problem hat.
    Spoiler anzeigen

    UPDATE POS
    SET ORDNUNG = CASE
    WHEN ORDNUNG >= :QS1 THEN ORDNUNG + 1
    ELSE Ordnung
    END
    WHERE AUFNR = :QS2




    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Dekras123“ ()