Eu preciso escrever um procedimento armazenado T-SQL que atualize uma linha em uma tabela. Se a linha não existir, insira-a. Todas essas etapas estão envolvidas por uma transação.
Isso é para um sistema de reservas, portanto deve ser atômico e confiável . Ele deve retornar verdadeiro se a transação foi confirmada e o voo reservado.
Eu sou novo no T-SQL e não tenho certeza de como usá-lo @@rowcount
. Isto é o que eu escrevi até agora. Estou no caminho certo? Tenho certeza que é um problema fácil para você.
-- 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?)