Change column on insert?

  • Ersteller Ersteller Thallius
  • Erstellt am Erstellt am
T

Thallius

Guest
Hi,

ich habe eine Tabelle

Code:
create table
(
    systemId VARCHAR(15) PRIMARY KEY,
    status int,
    checked int DEFAULT = 0
);

Nun lass ich jede Woche ein script laufen, welches den aktuellen Status aller Systeme ermittelt. Diese müssen in die Tabelle eingetragen werden.
Weiterhin hat ein User die Möglichkeit eine systemId als "checked" zu markieren. Das würde dann in der entsprechenden Spalte markiert werden.
Wenn nun in der nächsten Woche, sich der status des Systems nicht ändert, dann ändert sich auch das checked Feld nicht. Ändert sich der Status aber,
dann muss das checked Feld wieder zurück auf 0 gesetzt werden.
Konkretes Beispiel:

Nehmen wir an 1. Woche habe ich folgendes Ergebnis:

systemIdstatus
A1
B2

welche ich genauso In die Tabelle eintrage würde, ohne den checked mit anzugeben:

systemIdstatuschecked
A10
B20

Nun checked ein User system A. Die Tabelle würde geupdated auf:

systemIdstatuschecked
A11
B20

In der zweiten Woche bekomme ich folgende Ergebnisse

systemIdstatus
A1
B1

Die Tabelle wollte danach so aussehen:


systemIdstatuschecked
A11
B10

In der dritten Woche habe ich dann folgendes Ergebnis:


systemIdstatus
A0
B1

Jetzt muss die Tabelle nach dem Insert so aussehen:


systemIdstatuschecked
A00
B10

Kann man das auch ohne Trigger oder stored procedures lösen mit einem einfachen Query?
 
Werbung:
Grundsätzlich ja. Wenn du die Daten ab der zweiten Woche in die Tabelle schreibst, werden bestehende Datensätze dann per UPDATE aktualisiert oder löscht du den Datensatz und schreibst ihn mit INSERT neu? Bei UPDATE wäre ein CASE richtig, etwa so
Code:
UPDATE tabelle
SET tabelle.status = @neuer_status,
tabelle.checked = ( CASE WHEN tabelle.status = @neuer_status THEN tabelle.checked ELSE 0 END )
WHERE tabelle.systemId = @systemId
 
Zurück
Oben