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
Lepaskan: 2024-12-11 12:32:10
asal
949 orang telah melayarinya

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]);
Salin selepas log masuk

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');
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan