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 ?

Comment l'instruction MERGE de SQL Server imite-t-elle la MISE À JOUR DE LA CLÉ EN DUPLICATE de MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 12:32:10926parcourir

How Does SQL Server's MERGE Statement Mimic MySQL's ON DUPLICATE KEY UPDATE?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn