Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Wie mehrere Felder mit unterschiedl. where-Teilen in *einem* Update-Statement ändern? (https://www.delphipraxis.net/206357-wie-mehrere-felder-mit-unterschiedl-where-teilen-%2Aeinem%2A-update-statement-aendern.html)

BlueStarHH 13. Dez 2020 18:40

Datenbank: Firebird • Version: 3.x • Zugriff über: IBDAC

Wie mehrere Felder mit unterschiedl. where-Teilen in *einem* Update-Statement ändern?
 
Wie kann ich den folgenden SQL-Code in *einem* Update-Statement zusammen ausführen? Ich habe 10 dieser Statements, die ich nicht alle nacheinander ausführen möchte. Gibt es dafür eine spezielle SQL-Syntax?

Code:
Update MyTable set Feld1 = Feld1NEU where Feld1NEU <> 0;
Update MyTable set Feld2 = Feld2NEU where Feld2NEU <> 0;
Update MyTable set Feldn = FeldnNEU where FeldnNEU <> 0;

DieDolly 13. Dez 2020 18:42

AW: Wie mehrere Felder mit unterschiedl. where-Teilen in *einem* Update-Statement änd
 
Ich würde es an deiner Stelle so lassen. Alles andere wäre herumgetrickse und kein valides SQL.

DeddyH 13. Dez 2020 20:28

AW: Wie mehrere Felder mit unterschiedl. where-Teilen in *einem* Update-Statement änd
 
SQL-Code:
UPDATE Tabelle SET Feld1 = :Wert1, Feld2 = :Wert2 WHERE Dings = 1
Anschließend dann die Parameter belegen.
Delphi-Quellcode:
Query.FieldByName(´Wert1´).AsString := ´Hallo&#8216;&#8216;;
Query.FieldByName(´Wert2´).AsInteger := 42;
Query.ExecSQL;
[edit]Sry, Frage nicht richtig verstanden [/edit]

Uwe Raabe 13. Dez 2020 22:12

AW: Wie mehrere Felder mit unterschiedl. where-Teilen in *einem* Update-Statement änd
 
Nur so dahingeschrieben:
SQL-Code:
Update MyTable set
Feld1 = IIF(Feld1NEU <> 0, Feld1NEU, Feld1),
Feld1 = IIF(Feld2NEU <> 0, Feld2NEU, Feld2),
Feldn = IIF(FeldnNEU <> 0, FeldnNEU, Feldn)
WHERE (Feld1NEU <> 0) or (Feld2NEU <> 0) or (FeldnNEU <> 0)
Finde ich persönlich aber eher hässlich und ich bin mir auch nicht sicher, ob das überhaupt performanter ist.

Frickler 14. Dez 2020 08:31

AW: Wie mehrere Felder mit unterschiedl. where-Teilen in *einem* Update-Statement änd
 
Zitat:

Zitat von DieDolly (Beitrag 1479041)
Ich würde es an deiner Stelle so lassen. Alles andere wäre herumgetrickse und kein valides SQL.

Bei Firebird kann kannst Du die 10 Anweisungen in einem Rutsch an den Server senden, indem Du sie in einen Block einschließt:

Code:
SET TERM ^;
EXECUTE BLOCK AS
BEGIN
  Update MyTable set Feld1 = Feld1NEU where Feld1NEU <> 0;
  Update MyTable set Feld2 = Feld2NEU where Feld2NEU <> 0;
  Update MyTable set Feldn = FeldnNEU where FeldnNEU <> 0;
END^
SET TERM ;^
Damit wird das dann auch mit eingeschaltetem AutoCommit nur eine Transaktion.

Blup 14. Dez 2020 13:07

AW: Wie mehrere Felder mit unterschiedl. where-Teilen in *einem* Update-Statement änd
 
Mehrere Kommandos können als Script gemeinsam an den Server gesendet werden.
TIBCScript Class

Bsp.:
Code:
Update MyTable set Feld1 = Feld1NEU where Feld1NEU <> 0;
Update MyTable set Feld2 = Feld2NEU where Feld2NEU <> 0;
Update MyTable set Feldn = FeldnNEU where FeldnNEU <> 0;
Commit;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf