Dans MySQL, si vous spécifiez ON DUPLICATE KEY UPDATE et qu'une ligne est insérée qui provoquerait une valeur en double dans un index UNIQUE ou PRIMARY KEY, une MISE À JOUR de l'ancienne ligne est effectuée. Par exemple, si la colonne a est déclarée UNIQUE et contient la valeur 1, les deux instructions suivantes ont un effet identique:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
Je ne crois pas avoir rencontré quoi que ce soit de similaire dans T-SQL. SQL Server offre-t-il quelque chose de comparable à la mise à jour de clé ON DUPLICATE de MySQL?
Il n'y a pas d'équivalent DUPLICATE KEY UPDATE, mais MERGE et WHEN MATCHED peuvent fonctionner pour vous
Insertion, mise à jour et suppression de données à l'aide de MERGE
J'ai été surpris qu'aucune des réponses sur cette page ne contienne d'exemple de requête réelle, alors voilà:
Un exemple plus complexe d'insertion de données, puis de gestion des doublons
MERGE
INTO MyBigDB.dbo.METER_DATA WITH (HOLDLOCK) AS target
USING (SELECT
77748 AS rtu_id
,'12B096876' AS meter_id
,56112 AS meter_reading
,'20150602 00:20:11' AS local_time) AS source
(rtu_id, meter_id, meter_reading, time_local)
ON (target.rtu_id = source.rtu_id
AND target.time_local = source.time_local)
WHEN MATCHED
THEN UPDATE
SET meter_id = '12B096876'
,meter_reading = 56112
WHEN NOT MATCHED
THEN INSERT (rtu_id, meter_id, meter_reading, time_local)
VALUES (77748, '12B096876', 56112, '20150602 00:20:11');
SQL Server 2008 dispose de cette fonctionnalité, dans le cadre de TSQL.
Voir la documentation sur l'instruction MERGE ici - http://msdn.Microsoft.com/en-us/library/bb510625.aspx
SQL Server 2000 et versions ultérieures ont un concept de déclencheurs au lieu de ceux-ci, qui peuvent accomplir la fonctionnalité souhaitée - bien qu'il y ait un déclencheur désagréable se cachant dans les coulisses.
Vérifiez la section "Insérer ou mettre à jour?"
http://msdn.Microsoft.com/en-us/library/aa224818 (SQL.80) .aspx