Utilisateur anonyme
Détails
Vérifier si une ligne existe, sinon insérer
Je dois écrire une procédure stockée T-SQL qui met à jour une ligne dans une table. Si la ligne n'existe pas, l'insérer. Toutes ces étapes sont enveloppées par une transaction.
Il s'agit d'un système de réservation, qui doit donc être atomique et fiable. Elle doit renvoyer true si la transaction a été validée et le vol réservé.
Je suis nouveau en T-SQL, et je ne sais pas comment utiliser @@rowcount
. Voici ce que j'ai écrit jusqu'à présent. Suis-je sur la bonne voie ? Je suis sûr que c'est un problème facile pour vous.
-- BEGIN TRANSACTION (HOW TO DO?)
UPDATE Bookings
SET TicketsBooked = TicketsBooked + @TicketsToBook
WHERE FlightId = @Id AND TicketsMax < (TicketsBooked + @TicketsToBook)
-- Here I need to insert only if the row doesn't exists.
-- If the row exists but the condition TicketsMax is violated, I must not insert
-- the row and return FALSE
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO Bookings ... (omitted)
END
-- END TRANSACTION (HOW TO DO?)
-- Return TRUE (How to do?)
225
3
Je suppose qu'une seule ligne pour chaque vol ? Si c'est le cas :
Je suppose ce que j'ai dit, car votre façon de faire peut surbooker un vol, car elle insère une nouvelle ligne alors qu'il y a 10 billets maximum et que vous en réservez 20.
C'est quelque chose que j'ai dû faire récemment :
Vous pouvez utiliser la fonctionnalité [Merge][1] pour y parvenir. Sinon, vous pouvez le faire :
[1] : http://msdn.microsoft.com/en-us/library/bb510625.aspx