web-dev-qa-db-fra.com

SQL Server offre-t-il quelque chose comme MySQL SUR LA MISE À JOUR DE LA CLÉ DUPLICATE

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?

56
Ben Griswold

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

44
michael pearson

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');
32
IvanD

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

3
shahkalpesh

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

1
Tetraneutron