Maison >base de données >tutoriel mysql >Comment l'instruction MERGE de SQL Server imite-t-elle la MISE À JOUR DE LA CLÉ EN DUPLICATE de MySQL ?
L'homologue de SQL Server à ON DUPLICATE KEY UPDATE de MySQL
Dans MySQL, la clause ON DUPLICATE KEY UPDATE permet aux utilisateurs de mettre à jour les lignes existantes au lieu de en insérer de nouvelles si une clé en double est rencontrée. Cette fonctionnalité est particulièrement utile lorsqu'il s'agit de contraintes uniques et de clés primaires.
Instruction MERGE de SQL Server
Bien que SQL Server n'ait pas d'équivalent exact à ON DUPLICATE KEY de MySQL UPDATE, il fournit l'instruction MERGE comme solution comparable. MERGE combine les fonctionnalités des instructions INSERT, UPDATE et DELETE en une seule requête, permettant une gestion efficace des valeurs en double.
Implémentation de ON DUPLICATE KEY UPDATE à l'aide de MERGE
Pour implémenter le comportement de mise à jour en double dans SQL Server, vous pouvez utiliser ce qui suit syntaxe :
MERGE INTO [target_table] AS target USING [source_table] AS source ON (target.[matching_column] = source.[matching_column]) WHEN MATCHED THEN UPDATE SET [target_column] = [source_column] WHEN NOT MATCHED THEN INSERT ([target_column]) VALUES ([source_column]);
Exemple
Considérez la requête suivante qui insère des données dans une table nommée METER_DATA et met à jour les valeurs de ligne si un doublon existe en fonction de rtu_id et time_local columns :
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 time_local ) 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');
Cette requête insérera les valeurs de la table source dans la table cible si une ligne avec le les mêmes rtu_id et time_local n'existent pas déjà. S'il existe une ligne en double, la mise à jour sera effectuée à la place, préservant les données existantes dans la table cible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!