Maison >base de données >tutoriel mysql >Comment insérer ou mettre à jour atomiquement une ligne dans T-SQL à l'aide de @@rowcount ?

Comment insérer ou mettre à jour atomiquement une ligne dans T-SQL à l'aide de @@rowcount ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-07 12:57:40566parcourir

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

Insertion de ligne atomique avec vérification d'existence dans T-SQL

Votre besoin est de développer une procédure stockée T-SQL qui met à jour atomiquement une ligne dans un tableau. Si la ligne n'existe pas, elle doit être insérée dans une transaction, garantissant ainsi la fiabilité et l'atomicité. Vous devez utiliser @@rowcount efficacement pour déterminer si la ligne existe déjà.

Implémentation suggérée

Voici une version modifiée de votre code qui intègre la suggestion approche :

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

Explication :

  • Nous utilisons IF EXISTS pour vérifier si une ligne avec le FlightId spécifié existe déjà.
  • S'il existe, nous effectuons l'opération de mise à jour. Sinon, nous procédons à l'opération d'insertion.
  • Nous incluons une condition dans la déclaration de mise à jour pour garantir que le nouveau nombre de tickets ne dépasse pas le maximum autorisé.
  • Nous utilisons @@ERROR pour vérifier pour toute erreur lors de la transaction et renvoyez VRAI ou FAUX en conséquence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn