>데이터 베이스 >MySQL 튜토리얼 >SQL Server의 MERGE 문은 MySQL의 ON DUPLICATE KEY 업데이트를 어떻게 모방합니까?

SQL Server의 MERGE 문은 MySQL의 ON DUPLICATE KEY 업데이트를 어떻게 모방합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-11 12:32:10924검색

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

MySQL의 ON DUPLICATE KEY UPDATE에 대한 SQL Server의 대응

MySQL에서 ON DUPLICATE KEY UPDATE 절을 사용하면 사용자가 업데이트 대신 기존 행을 업데이트할 수 있습니다. 중복된 키가 발견되면 새 키를 삽입합니다. 이 기능은 고유 제약 조건과 기본 키를 처리할 때 특히 유용합니다.

SQL Server의 MERGE 문

SQL Server에는 MySQL의 ON DUPLICATE KEY와 완전히 동일한 기능이 없지만 업데이트, 유사한 솔루션으로 MERGE 문을 제공합니다. MERGE는 INSERT, UPDATE 및 DELETE 문의 기능을 단일 쿼리로 결합하여 중복 값을 효율적으로 처리할 수 있도록 합니다.

MERGE를 사용하여 ON DUPLICATE KEY UPDATE 구현

SQL Server에서 중복 업데이트 동작을 구현하려면 다음을 사용할 수 있습니다. 구문:

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]);

METER_DATA라는 테이블에 데이터를 삽입하고 rtu_id 및 time_local을 기반으로 중복이 존재하는 경우 행 값을 업데이트하는 다음 쿼리를 고려해 보세요. 열:

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

이 쿼리는 소스 테이블의 값을 대상 테이블에 삽입합니다. rtu_id와 time_local이 동일한 행이 아직 존재하지 않는 경우 중복 행이 존재하는 경우 대상 테이블의 기존 데이터를 유지하면서 업데이트가 대신 수행됩니다.

위 내용은 SQL Server의 MERGE 문은 MySQL의 ON DUPLICATE KEY 업데이트를 어떻게 모방합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.