Heim >Datenbank >MySQL-Tutorial >Wie füge ich eine Zeile in T-SQL mithilfe von @@rowcount atomar ein oder aktualisiere sie?

Wie füge ich eine Zeile in T-SQL mithilfe von @@rowcount atomar ein oder aktualisiere sie?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-07 12:57:40582Durchsuche

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

Atomere Zeileneinfügung mit Existenzprüfung in T-SQL

Ihre Anforderung besteht darin, eine gespeicherte T-SQL-Prozedur zu entwickeln, die eine Zeile atomar aktualisiert in einer Tabelle. Falls die Zeile nicht existiert, sollte sie in eine Transaktion eingefügt werden, um Zuverlässigkeit und Atomizität sicherzustellen. Sie müssen @@rowcount effektiv nutzen, um festzustellen, ob die Zeile bereits vorhanden ist.

Vorgeschlagene Implementierung

Hier ist eine modifizierte Version Ihres Codes, die den vorgeschlagenen Ansatz enthält:

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

Erklärung:

  • Wir Verwenden Sie IF EXISTS, um zu prüfen, ob eine Zeile mit der angegebenen FlightId bereits vorhanden ist.
  • Wenn sie vorhanden ist, führen wir den Aktualisierungsvorgang durch. Andernfalls fahren wir mit dem Einfügevorgang fort.
  • Wir fügen eine Bedingung in die Aktualisierungsanweisung ein, um sicherzustellen, dass die neue Ticketanzahl den maximal zulässigen Wert nicht überschreitet.
  • Wir verwenden @@ERROR zur Überprüfung für etwaige Fehler während der Transaktion und geben Sie entsprechend TRUE oder FALSE zurück.

Das obige ist der detaillierte Inhalt vonWie füge ich eine Zeile in T-SQL mithilfe von @@rowcount atomar ein oder aktualisiere sie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn