Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Mehrfach Update STatement

  Alt 6. Jul 2019, 11:17
Hallo Zusammen,

ich versuche mich gerade an einem Statement, mit dem ich mehrere Zeilen (hier im Beispiel 3 Zeilen) mit jeweil 3 Werten updaten möchte. Wenn ich das mit einzelnen SQL-Statements mache, wird die Procedure sehr langsam.

Folgendes habe ich gefunden, bzw. auf meinen Fall umgebaut:
Delphi-Quellcode:
update as400 set
  sequence = case
      when concat(waaunr,'-',waaupo) ='408216-0and oaagnr =10 then 1
      when concat(waaunr,'-',waaupo) ='408217-0and oaagnr =10 then 2
      when concat(waaunr,'-',waaupo) ='408218-0and oaagnr =10 then 3
  end,
  frozen = case
      when concat(waaunr,'-',waaupo) ='408216-0and oaagnr =10 then 1
      when concat(waaunr,'-',waaupo) ='408217-0and oaagnr =10 then 1
      when concat(waaunr,'-',waaupo) ='408218-0and oaagnr =10 then 0
  end,
  plan_date = case
      when concat(waaunr,'-',waaupo) ='408216-0and oaagnr =10 then '2019-07-05'
      when concat(waaunr,'-',waaupo) ='408217-0and oaagnr =10 then '2019-07-05'
      when concat(waaunr,'-',waaupo) ='408218-0and oaagnr =10 then '2019-07-06'
  end
where concat(waaunr,'-',waaupo) in ('408216-0', '408217-0', '408218-0')
Aber leider habe ich das Problem, dass ich die Fehlermeldung "Column 'sequence' cannot be null" bekomme.

Wenn ich das richtig sehe, wird der Wert für die Spalten nicht erkannt.

Sieht jemand was ich falsch mache und kann mir jemand einen Tip geben?

Vielen Dank
Patrick
So wie ich das sehe ist die where-Klausel nicht richtig konstruiert. oaagnr ist doch für alle Zeilen, die upgedated werden sollen, gleich (10 im obigen Beispiel), oder. Daher gehört diese Bedingung in die where-Klausel, nicht in die when-Klauseln für das Case statement. Mit deinem obigen Konstrukt findet die Query auch Zeilen, die zwar die gewünschte waaaunr und waaupo-Werte haben, aber andere oaagnr-Werte. Die werden upgedatet, nur halt mit NULL da keines der when-Klauseln auf die Zeile Matcht.

Delphi-Quellcode:
update as400 set
  sequence = case
      when concat(waaunr,'-',waaupo) ='408216-0then 1
      when concat(waaunr,'-',waaupo) ='408217-0then 2
      when concat(waaunr,'-',waaupo) ='408218-0then 3
  end,
  frozen = case
      when concat(waaunr,'-',waaupo) ='408216-0then 1
      when concat(waaunr,'-',waaupo) ='408217-0then 1
      when concat(waaunr,'-',waaupo) ='408218-0then 0
  end,
  plan_date = case
      when concat(waaunr,'-',waaupo) ='408216-0then '2019-07-05'
      when concat(waaunr,'-',waaupo) ='408217-0then '2019-07-05'
      when concat(waaunr,'-',waaupo) ='408218-0then '2019-07-06'
  end
where concat(waaunr,'-',waaupo) in ('408216-0', '408217-0', '408218-0')
  and (oaagnr =10)
Wer auf diese Spaltennamen gekommen ist gehört übrigens standrechtlich erschossen.
Peter Below
  Mit Zitat antworten Zitat