![]() |
AW: Mehrfach Update STatement
Hallo,
was ist, wenn keines deiner 3 when zuschlägt. Ich bin der Meinung, dass eine else fehlt. Dein Feld sequenze ist doch bestimmt als not null gekennzeichnet oder ? |
AW: Mehrfach Update STatement
Ja, das Feld ist als not null definiert. Aber die Abfrage müsste Matchen, so dass mir ein Else vielleicht die Fehlermeldung eliminieret, aber mir nicht das Update durchführt…
|
AW: Mehrfach Update STatement
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe jetzt ein Else eingebaut und es hat einen Teilerfolg gebracht:
Delphi-Quellcode:
Jetzt wird tatsächlich die Daten eingetragen, aber bei allen anderen Arbeitsgängen (nach 10 kommt 20, 30 usw) greift dann das ELSE.
update as400 set
sequence = case when (concat(waaunr,'-',waaupo) ='408216-0' and oaagnr =20) then 1 when (concat(waaunr,'-',waaupo) ='408217-0' and oaagnr =20) then 2 when (concat(waaunr,'-',waaupo) ='408218-0' and oaagnr =20) then 3 else 0 end, frozen = case when (concat(waaunr,'-',waaupo) ='408216-0' and oaagnr =20) then 1 when (concat(waaunr,'-',waaupo) ='408217-0' and oaagnr =20) then 1 when (concat(waaunr,'-',waaupo) ='408218-0' and oaagnr =20) then 0 else 0 end, plan_date = case when (concat(waaunr,'-',waaupo) ='408216-0' and oaagnr =20) then '2019-07-05' when (concat(waaunr,'-',waaupo) ='408217-0' and oaagnr =20) then '2019-07-05' when (concat(waaunr,'-',waaupo) ='408218-0' and oaagnr =20) then '2019-07-06' else '000-00-00' end where concat(waaunr,'-',waaupo) in ('408216-0', '408217-0', '408218-0') das bedeutet, dass die vorhergehenden Daten, die unangetastet bleiben sollen, mit dem ELSE überschrieben werden... Ich habe es in zwei Screenshots dargestellt... |
AW: Mehrfach Update STatement
Vielleicht habe ich eine Möglichkeit gefunden, wie ich das Problem umgehen kann. Ich packe das zweite Feld als concat in die letzte WHERE-Klausel mit rein, dann scheint es zu funktionieren. Das sieht zwar nicht so schön aus, in sofern bin ich für Vorschläge sehr offen...
Delphi-Quellcode:
Vielen Dank
update as400 set
sequence = case when (concat(waaunr,'-',waaupo) ='408216-0' and oaagnr =10) then 1 when (concat(waaunr,'-',waaupo) ='408217-0' and oaagnr =10) then 2 when (concat(waaunr,'-',waaupo) ='408218-0' and oaagnr =10) then 3 else 0 end, frozen = case when (concat(waaunr,'-',waaupo) ='408216-0' and oaagnr =10) then 1 when (concat(waaunr,'-',waaupo) ='408217-0' and oaagnr =10) then 1 when (concat(waaunr,'-',waaupo) ='408218-0' and oaagnr =10) then 0 else 0 end, plan_date = case when (concat(waaunr,'-',waaupo) ='408216-0' and oaagnr =10) then '2019-07-05' when (concat(waaunr,'-',waaupo) ='408217-0' and oaagnr =10) then '2019-07-05' when (concat(waaunr,'-',waaupo) ='408218-0' and oaagnr =10) then '2019-07-06' else '000-00-00' end where concat(waaunr,'-',waaupo,'-',oaagnr) in ('408216-0-10', '408217-0-10', '408218-0-10') Patrick |
AW: Mehrfach Update STatement
Puh,
und das kurz vorm Wochenende. Aber wenn es geht, ist doch gut. |
AW: Mehrfach Update STatement
Vielen Dank für die Unterstützung.
Schönes Wochenende |
AW: Mehrfach Update STatement
Zitat:
Delphi-Quellcode:
Wer auf diese Spaltennamen gekommen ist gehört übrigens standrechtlich erschossen. :wink:
update as400 set
sequence = case when concat(waaunr,'-',waaupo) ='408216-0' then 1 when concat(waaunr,'-',waaupo) ='408217-0' then 2 when concat(waaunr,'-',waaupo) ='408218-0' then 3 end, frozen = case when concat(waaunr,'-',waaupo) ='408216-0' then 1 when concat(waaunr,'-',waaupo) ='408217-0' then 1 when concat(waaunr,'-',waaupo) ='408218-0' then 0 end, plan_date = case when concat(waaunr,'-',waaupo) ='408216-0' then '2019-07-05' when concat(waaunr,'-',waaupo) ='408217-0' then '2019-07-05' when concat(waaunr,'-',waaupo) ='408218-0' then '2019-07-06' end where concat(waaunr,'-',waaupo) in ('408216-0', '408217-0', '408218-0') and (oaagnr =10) |
AW: Mehrfach Update Statement
Zitat:
Falls waaunr Integer, dann Hochkommas weg!!!
SQL-Code:
Concats in Wherebedingungen machen das nur langsamer, da kaum ein Index genutzt werden kann. Mag bei kleinen Datenmengen ok sein, aber allgemein lieber eher nicht.
update as400 set
sequence = case when waaunr = '408216' then 1 when waaunr = '408217' then 2 when waaunr = '408218' then 3 end, frozen = case when waaunr = '408216' then 1 when waaunr = '408217' then 1 when waaunr = '408218' then 0 end, plan_date = case when waaunr = '408216' then '2019-07-05' when waaunr = '408217' then '2019-07-05' when waaunr = '408218' then '2019-07-06' end where waaunr in ('408216', '408217', '408218') and waaupo = 0 and oaagnr = 10 Und so, wie man in 'ner Wherebedingung mehrere Vergleiche per And oder per Or verknüpfen kann, kann man das auch im When. Sind mehrere Spalten bei einem When zu vergleichen, dann ist der Vergleich als Zeichenfolge via Concat eher die schlechtere Alternative. |
AW: Mehrfach Update STatement
Hallo Zusammen,
oaagnr kann unterschiedlich sein. In diesem aktuellen Beispiel ist es zwar identisch, aber bei nachfolgenden Prozessen ist das nicht sichergestellt. Daher muss ich es als zusätzlichen Parameter verwenden. Und auch waaupo ist zwar meistens 0 aber nicht immer... Und wenn es unterschiedlich ist, kenne ich nicht die Syntax, es anders unterzubringen... Gruß Patrick |
AW: Mehrfach Update STatement
Hallo,
WaitCursor und gut is ;) PS: Eine Stored Procedure könnte das ev. noch beschleunigen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz