sql >> Base de Datos >  >> RDS >> Mysql

Inserción condicional basada en LAST_INSERT_ID

Tu segundo intento fue casi correcto. Tienes que verificar los valores NULL con IS NOT NULL. Así que 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 != 

El primero no puede funcionar:

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

porque la sintaxis de IF es

La ejecución condicional de declaraciones solo es posible en rutinas almacenadas . La sintaxis IF de rutinas almacenadas permitiría algo como

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

Tienes que distinguir ambas versiones de sintaxis.