Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL, firebird] Werte von zwei Spalten tauschen (https://www.delphipraxis.net/95569-%5Bsql-firebird%5D-werte-von-zwei-spalten-tauschen.html)

BlueStarHH 9. Jul 2007 17:07

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBX: TIBQuery

[SQL, firebird] Werte von zwei Spalten tauschen
 
Wie kann ich per SQL die Werte von zwei Spalten tauschen? Folgendes habe ich probiert:

SQL-Code:
update buchung
set Konto = :OLD_Gegenkonto, Gegenkonto = :OLD_Konto
Es erscheint die Fehlermeldung, obwohl KONTO keine Nullwerte enthält:
validation error for column KONTO, value "*** null ***"

DeddyH 9. Jul 2007 17:33

Re: [SQL, firebird] Werte von zwei Spalten tauschen
 
Und wenn Du die Zeichenfolge ":OLD_" mal weglässt?

hoika 9. Jul 2007 22:13

Re: [SQL, firebird] Werte von zwei Spalten tauschen
 
Hallo,

update table_X
set field='bla1', fiel2='bla2
???
where id=was_wees_icke


Heiko

mkinzler 9. Jul 2007 22:16

Re: [SQL, firebird] Werte von zwei Spalten tauschen
 
oder ne kleine SP

Elvis 9. Jul 2007 22:21

Re: [SQL, firebird] Werte von zwei Spalten tauschen
 
Zitat:

Zitat von hoika
das geht nur über 2 Update-Queries

Ich bin mir jetzt nicht so sicher wie es hier mit Firebird im Speziellen aussieht.
Aber generell wird bei einem Update die rechte Seite von vor dem Update genommen.
SQL-Code:
update Buchung
set Konto     = Gegenkonto,
    Gegenkonto = Konto
WHERE BlablablB
Wenn das nicht geht, dann das
SQL-Code:
update Buchung t
set (Konto, Gegenkonto) = (SELECT Gegenkonto, Konto
                           FROM  Buchung
                           WHERE ID = t.ID)
WHERE BlablablB

BlueStarHH 16. Jul 2007 16:00

Re: [SQL, firebird] Werte von zwei Spalten tauschen
 
Zitat:

Zitat von DeddyH
Und wenn Du die Zeichenfolge ":OLD_" mal weglässt?

Dann habe ich ein beiden Feldern die selben Werte stehen. Klappt also nicht.

BlueStarHH 16. Jul 2007 16:03

Re: [SQL, firebird] Werte von zwei Spalten tauschen
 
Code:
update Buchung
set Konto     = Gegenkonto,
    Gegenkonto = Konto
WHERE BlablablB
Klappt nicht, da haben beide Felder dann die selben Werte.

Code:
update Buchung t
set (Konto, Gegenkonto) = (SELECT Gegenkonto, Konto
                           FROM  Buchung
                           WHERE ID = t.ID)
WHERE BlablablB
Klappt nicht. Syntaxfehler: Die Klammer nach set stört. Wenn die gelöscht wird, stört Firebird das Komma zwischen Konto, Gegenkonto.

mkinzler 16. Jul 2007 16:05

Re: [SQL, firebird] Werte von zwei Spalten tauschen
 
SQL-Code:
update
    Buchung t
set
    Konto = (SELECT Gegenkonto
                           FROM  Buchung
                           WHERE ID = t.ID),
    Gegenkonto =(SELECT Konto
                           FROM  Buchung
                           WHERE ID = t.ID)
WHERE BlablablB
[Edit: überflüssiges , entfernt]

DeddyH 16. Jul 2007 18:03

Re: [SQL, firebird] Werte von zwei Spalten tauschen
 
Ich hätte nicht gedacht, dass Firebird sich da so zickig hat. Vielmehr war ich davon ausgegangen, was Elvis auch schon gesagt hat:
Zitat:

Zitat von Elvis
Aber generell wird bei einem Update die rechte Seite von vor dem Update genommen.

Man lernt eben nie aus.

BlueStarHH 16. Jul 2007 18:24

Re: [SQL, firebird] Werte von zwei Spalten tauschen
 
Die Lösung von mkinzler im Beitrag #8 klappt, wenn man das Komma hinter Gegenkonto entfernt. Danke an alle!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.

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