Bonjour,
Si l'enregistrement n'existe pas je veux l'insérer et s'il existe je veux faire un update de l'enregistrement.
Cela peut il se faire en une instruction ?
Merci,
Christophe
Version imprimable
Bonjour,
Si l'enregistrement n'existe pas je veux l'insérer et s'il existe je veux faire un update de l'enregistrement.
Cela peut il se faire en une instruction ?
Merci,
Christophe
Bonjour,
Oui, c'est possible. Pour cela, il faut utiliser non pas INSERT ou UPDATE, mais l'instruction MERGE
Bonjour,
Avec certains SGBDs, il faut utiliser INSERT INTO... UPDATE DUPLICATE, et avec MySQL INSERT INTO... ON DUPLICATE KEY UPDATE...
C'est pour cela qu'il faut toujours préciser le SGBD concerné dans les questions.
Tatayo.
MERGE st l'instruction normalisée depuis la version 1999 de la norme SQL !
Pourquoi certains SGBD merdique veulent-ils faire autre chose ???
C'est particulièrement stupide car le MERGE permet de faire jusqu'à 3 choses :
- INSERT si condition non trouvée dans la cible
- UPDATE si condition trouvée entre cible et source
- DELETE si condition non trouvée dans la source.
En outre chaque branche de condition peut faire l'objet d'un prédicat supplémentaire...
Aucune des solutions de ON DUPLICATE KEY (de MySQmerde) ou de INSERT OR UPDATE de FIREBIRD ne peut prétendre à la même souplesse !
A +
Bonjour,
pour répondre @SQLPro qui semble croire que Firebird ne respecte pas la norme MERGE est une instruction implémentée depuis la version 2.1 de Firebird. La version 3 de Firebird a encore amélioré MERGE (désolé je n'ai pas trouvé de lien "simple" seulement une présentation de 2014 page 7)
Le INSERT OR UPDATE est une vieille "habitude" gardée pour compatibilité avec de vieilles versions.
Conclusion, ne pas donner d'avis tranché sans savoir ;)