Rumah >pangkalan data >tutorial mysql >Bagaimanakah Pernyataan MERGE SQL Server Meniru MySQL ON DUPLICATE KEY UPDATE?

Bagaimanakah Pernyataan MERGE SQL Server Meniru MySQL ON DUPLICATE KEY UPDATE?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-11 12:32:101006semak imbas

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

SQL Server's Counterpart to MySQL ON DUPLICATE KEY UPDATE

Dalam MySQL, klausa ON DUPLICATE KEY UPDATE membenarkan pengguna mengemas kini baris sedia ada dan bukannya memasukkan yang baharu jika kunci pendua ditemui. Ciri ini amat berguna apabila menangani kekangan unik dan kunci utama.

Pernyataan MERGE Pelayan SQL

Walaupun SQL Server tidak mempunyai persamaan yang tepat dengan MySQL ON DUPLICATE KEY KEMASKINI, ia menyediakan pernyataan MERGE sebagai penyelesaian yang setanding. MERGE menggabungkan kefungsian INSERT, UPDATE dan DELETE pernyataan ke dalam satu pertanyaan, membolehkan pengendalian nilai pendua yang cekap.

Melaksanakan ON DUPLICATE KEY UPDATE Menggunakan MERGE

Untuk melaksanakan tingkah laku pada-pendua-kemas kini dalam SQL Server, anda boleh menggunakan yang berikut sintaks:

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

Contoh

Pertimbangkan pertanyaan berikut yang memasukkan data ke dalam jadual bernama METER_DATA dan mengemas kini nilai baris jika pendua wujud berdasarkan rtu_id dan time_local lajur:

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

Pertanyaan ini akan memasukkan nilai daripada jadual sumber ke dalam jadual sasaran jika baris dengan rtu_id dan time_local yang sama belum wujud. Jika baris pendua wujud, kemas kini akan dilakukan sebaliknya, mengekalkan data sedia ada dalam jadual sasaran.

Atas ialah kandungan terperinci Bagaimanakah Pernyataan MERGE SQL Server Meniru MySQL ON DUPLICATE KEY UPDATE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn