Mysql
 sql >> Database >  >> RDS >> Mysql

Inserimento condizionale basato su LAST_INSERT_ID

Il tuo secondo tentativo era quasi perfetto. Devi controllare i valori NULL con IS NOT NULL. Quindi usa

INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE)
SELECT @EVENT_ID, 'Notes', 'WO#89574' FROM DUAL
WHERE @EVENT_ID IS NOT NULL;  -- instead of != 

o

INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE)
SELECT t.* FROM (
    SELECT @EVENT_ID, 'Notes', 'WO#89574'
) t
WHERE @EVENT_ID IS NOT NULL;  -- instead of != 

Il primo non può funzionare:

-- THIS DOES NOT WORK
SELECT IF(@EVENT_ID != null, 
    INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE) ...

perché la sintassi di IF è

L'esecuzione condizionale delle istruzioni è possibile solo nelle routine memorizzate . La sintassi IF delle routine memorizzate consentirebbe qualcosa come

IF @EVENT_ID IS NOT NULL THEN
    INSERT INTO EVENTDETAILS (EVENT_ID, ITEMNAME, ITEMVALUE) ...
END IF

Devi distinguere queste due versioni di sintassi.