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
Libérer: 2024-12-11 12:32:10
original
949 Les gens l'ont consulté

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]);
Copier après la connexion

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');
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal