Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insertion conditionnelle basée sur LAST_INSERT_ID

Votre deuxième essai était presque bon. Vous devez vérifier les valeurs NULL avec IS NOT NULL. Alors utilisez

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

ou

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 != 

Le premier ne peut pas fonctionner :

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

car la syntaxe de IF est

L'exécution conditionnelle des instructions n'est possible que dans les routines stockées . La syntaxe IF des routines stockées permettrait quelque chose comme

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

Vous devez distinguer ces deux versions de syntaxe.