PDA

View Full Version : Update per SQL



jkuetema
09-03-05, 08:13
Hallo *all,

habe folgendes Problem mit einer UPDATE Anweisung im interaktiven SQL:

Ich möchte das Feld KVB34 ( Kundenklasse) in der Datei SVAKVB mit den entsprechenden Werten aus der Datei Ranking aktualisieren.
Soll heissen: die Kundenklasse in der ersten Datei sollen der Klasse aus der zweiten Datei angepasst werden.
Beide Dateien haben keine doppelten Sätze.
Schlüssel ist die Kundennummer.

UPDATE
mylib/svakvb a
set a.kvb34 =
(SELECT b.rank2
from mylib/ranking b where
b.rank1 = a.kvb02 and
a.kvb01 = '01' and
a.kvb34 <> b.rank2 )

ich kriege aber immer den Fehler:
Nullwerte für Spalte oder Variable KVB34 nicht zulässig.
- wie kann ich das umgehen ????

Vilen Dank für Eure Hilfe. :confused:

BenderD
09-03-05, 08:55
Hallo,

die Fehlermeldung sagt doch genau, was nicht passt: es sind Sätze in der ersten Datei (die mit dem update) die in der zweiten Datei kein Pendant haben - was soll denn bei denen geschehen???

mfg

Dieter Bender


Hallo *all,

habe folgendes Problem mit einer UPDATE Anweisung im interaktiven SQL:

Ich möchte das Feld KVB34 ( Kundenklasse) in der Datei SVAKVB mit den entsprechenden Werten aus der Datei Ranking aktualisieren.
Soll heissen: die Kundenklasse in der ersten Datei sollen der Klasse aus der zweiten Datei angepasst werden.
Beide Dateien haben keine doppelten Sätze.
Schlüssel ist die Kundennummer.

UPDATE
mylib/svakvb a
set a.kvb34 =
(SELECT b.rank2
from mylib/ranking b where
b.rank1 = a.kvb02 and
a.kvb01 = '01' and
a.kvb34 <> b.rank2 )

ich kriege aber immer den Fehler:
Nullwerte für Spalte oder Variable KVB34 nicht zulässig.
- wie kann ich das umgehen ????

Vilen Dank für Eure Hilfe. :confused:

Fuerchau
09-03-05, 09:45
UPDATE
mylib/svakvb a
set a.kvb34 =
(SELECT b.rank2
from mylib/ranking b where
b.rank1 = a.kvb02 and
a.kvb01 = '01' and
a.kvb34 <> b.rank2 )
where b.rank1 = a.kvb02 and
a.kvb01 = '01' and
a.kvb34 <> b.rank2

jkuetema
09-03-05, 10:14
Hallo BenderD,

ok Du hast gewonnen...sehe den Wald vor lauter Bäumen nicht.

Der Update funktioniert natürlich, wenn überall ein Treffer gelandet wird.
Aber wie formuliere ich jetzt das "Überlesen" wenn kein Treffer gelandet wird? Dann soll eben "einfach" der nächste Satz genommen werden.


Bin für jeden Hinweis dankbar.

BenderD
09-03-05, 10:29
Hallo,

das ist ja nicht selbstverständlich, es könnte ja auch sein, dass man dann sonstwas da reinschreiben will.
UPDATE
mylib/svakvb a
set a.kvb34 =
coalesce(
(SELECT b.rank2
from mylib/ranking b where
b.rank1 = a.kvb02 and
a.kvb01 = '01' and
a.kvb34 <> b.rank2 )
, a.kvb34
)
müsste gehen.

mfg

Dieter Bender

Hallo BenderD,

ok Du hast gewonnen...sehe den Wald vor lauter Bäumen nicht.

Der Update funktioniert natürlich, wenn überall ein Treffer gelandet wird.
Aber wie formuliere ich jetzt das "Überlesen" wenn kein Treffer gelandet wird? Dann soll eben "einfach" der nächste Satz genommen werden.


Bin für jeden Hinweis dankbar.

jkuetema
09-03-05, 11:05
Hallo BenderD,

1a Lösung genau das habe ich gesucht.
SQL ist eben doch eine tolles Tool, wenn man's denn beherrscht ;)

Vielen Dank nochmals.

Gruss Jens

Fuerchau
09-03-05, 11:58
Allerdings würde ich meine Lösung vorziehen, durch die Where-Bedingung im Update beschränkt sich die Anzahl Sätze auf vorhandene Daten.
Mit Coalesce (oder VALUE) wird ein Datensatz unnötigerweise mit dem selben Inhalt upgedatet. Wenn man dann noch Journalisierung oder Trigger hätte ...