IIF vs. Where Bedingung

Babsi

SQL-Guru
Beiträge
122
Schönen guten Morgen,

ich habe eine Stored Procedure in der folgendes vorkomnmt:
UPDATE [zzHilfstabelle->Rechnung]
SET Wert = IIf([Wert]=0,CAST(CAST([Umsatz]*[Menge]*100/100 AS Bigint)AS FLOAT),[Wert]);


Wenn das ausgeführt wird und ich danach prüfe, finde ich aber immer noch Einträge mit '0'.
Auch wenn ich IIF durch Case When ersetze.

Wenn ich aber:

UPDATE [zzHilfstabelle->Rechnung]
SET Wert = CAST(CAST([Umsatz]*[Menge]*100/100 AS Bigint)AS FLOAT)
WHERE [Wert]=0


Werden genau die Einträge auch geändert. was verstehe ich hier denn falsch?
 
Werbung:
Ich denke das sind Rundungseffekte.
0x irgendwas ist halt was anderes als 1 x irgendwas. Wie cast arbeitet (rundet), weiß ich nicht.
 
Durch das Cast auf Bigint wird die Kommazahl einfach abgeschnitten. Wenn also dein Umsatz mal Menge < 1 ist, wird dein neuer Wert 0 sein.
 
Werbung:
Interessant wäre noch der Datentyp der Spalte "Wert".

Grundsätzlich würde ich aber noch sagen ganz schlechter Stil ohne WHERE-Bedingung. Du schreibst damit unnötiger Weise in alle Datensätze, auch wenn am Ende Wert ggf. der selbe ist. Das impliziert einige mögliche Nachteile für Performance, Trigger und/oder die Sicherheit, wenn dein Code mal einfach nicht stimmt. Z.B. wenn du Copy-Paste machst und vergisst, den Spaltennamen am Ende zu ändern.
 
Zurück
Oben