Rolf B: ASP + Access Datenbank + UPDATE COLUMN IF COLUMN IS NULL ELSE ...

Beitrag lesen

Hallo supernewb,

ich kenne mich mit SQL aus, aber nicht mit Access. Dein Statement sieht nach Phantasie-Syntax aus und kann darum vermutlich nicht funktionieren.

Die grundlegende UPDATE Syntax ist:

UPDATE tabelle
SET spaltenname=wert, spaltenname=wert,WHERE zeilenbedingung

Du kannst da nicht beliebig Schlüsselworte hineinstreuen, du musst Dich an die vorgegebenen Sprach-Regeln halten.

  • der Spaltenname kann nicht variabel sein
  • der Wert muss als gültiger SQL-Ausdruck aufgebaut sein
  • Du kannst nicht Befehlsteile (wie SET spalte=wert) mit einem IF oder CASE in eine Bedingung setzen.

Ich weiß nicht einmal, ob Access SQL einen CASE-Ausdruck im SELECT versteht. MS SQL Server kennt es, in Access-Beispielen taucht es auch auf, aber formal definiert ist es in der MSDN oder docs.microsoft.com nicht. Zumindest nicht da, wo ich zu suchen versucht habe. Die Zeiten, wo die Doku-Autoren von MS etwas geschrieben haben, das mir sinnvoll erschien, sind seit 15 Jahren vorbei.

Ich würde Dir drei UPDATE-Befehle empfehlen:

UPDATE Mitarbeiter SET Beauftragung=? WHERE ID=? AND Beauftragung IS NULL 
UPDATE Mitarbeiter SET Beauftragung2=? WHERE ID=? AND Beauftragung2 IS NULL 
UPDATE Mitarbeiter SET Beauftragung3=? WHERE ID=? AND Beauftragung3 IS NULL 

Man kann das auch in ein UPDATE Statement packen:

UPDATE Mitarbeiter 
SET Beauftragung=IIF(Beauftragung is null, ?, Beauftragung),
    Beauftragung2=IIF(Beauftragung2 is null, ?, Beauftragung2),
    Beauftragung3=IIF(Beauftragung2 is null, ?, Beauftragung3),
WHERE ID=?

Da musst Du dann passend die Werte für die ? übergeben. Ob das komplexe Statement schneller ist als drei einzelne, weiß ich nicht. Musst Du ausprobieren.

Wie Du dem MM_editCmd die Parameter passend beibringst, kann ich Dir nicht sagen. Wie gesagt, ich kene

Rolf

--
sumpsi - posui - clusi