Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memasukkan atau Mengemas kini Baris secara Atom dalam T-SQL Menggunakan @@rowcount?

Bagaimana untuk Memasukkan atau Mengemas kini Baris secara Atom dalam T-SQL Menggunakan @@rowcount?

Patricia Arquette
Patricia Arquetteasal
2025-01-07 12:57:40530semak imbas

How to Atomically Insert or Update a Row in T-SQL Using @@rowcount?

Pemasukan Baris Atom dengan Semakan Kewujudan dalam T-SQL

Keperluan anda adalah untuk membangunkan prosedur tersimpan T-SQL yang mengemas kini baris secara atom dalam sebuah meja. Sekiranya baris itu tidak wujud, ia harus dimasukkan dalam transaksi, memastikan kebolehpercayaan dan atomicity. Anda perlu menggunakan @@rowcount dengan berkesan untuk menentukan sama ada baris itu sudah wujud.

Pelaksanaan Cadangan

Berikut ialah versi diubah suai kod anda yang menggabungkan cadangan pendekatan:

BEGIN TRANSACTION;

IF EXISTS (SELECT 1 FROM Bookings WHERE FlightId = @Id)
BEGIN
    UPDATE Bookings
    SET TicketsBooked = TicketsBooked + @TicketsToBook
    WHERE FlightId = @Id AND TicketsMax >= (TicketsBooked + @TicketsToBook);
END
ELSE
BEGIN
    INSERT INTO Bookings ... (omitted);
END

/* Remaining transaction logic */

COMMIT TRANSACTION;

IF @@ERROR = 0
BEGIN
    RETURN TRUE;  -- Return success if no errors occurred
END
ELSE
BEGIN
    RETURN FALSE; -- Return failure in case of errors
END

Penjelasan:

  • Kami menggunakan JIKA WUJUD untuk menyemak sama ada baris dengan FlightId yang ditentukan sudah wujud.
  • Jika ia wujud, kami melaksanakan operasi kemas kini. Jika tidak, kami meneruskan operasi sisipan.
  • Kami menyertakan syarat dalam penyata kemas kini untuk memastikan kiraan tiket baharu tidak melebihi maksimum yang dibenarkan.
  • Kami menggunakan @@ERROR untuk menyemak untuk sebarang ralat semasa transaksi dan kembalikan BENAR atau SALAH dengan sewajarnya.

Atas ialah kandungan terperinci Bagaimana untuk Memasukkan atau Mengemas kini Baris secara Atom dalam T-SQL Menggunakan @@rowcount?. 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