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,
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.
Et pour enfoncer le clou sous FIREBIRD, il y a :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 UPDATE OR INSERT INTO {tablename | viewname} [(<columns>)] VALUES (<values>) [MATCHING (<columns>)] [RETURNING <values> [INTO <variables>]]
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 +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
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![]()
Partager