Usuário anônimo
Mais
Verifique se existe uma linha, caso contrário insira
Eu preciso escrever um procedimento de armazenamento de T-SQL que atualiza uma linha em uma tabela. Se a linha não't existir, insira-a. Todos estes passos são envolvidos por uma transação.
Isto é para um sistema de reservas, por isso deve ser **atómico e fiável***. Deve retornar verdadeiro se a transação foi comprometida e o vôo foi reservado.
I'm novo para T-SQL, e não tenho certeza de como utilizar @@rowcount
. Isto é o que I'tenho escrito até agora. Estou no caminho certo? I'certamente é 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?)
225
3
Assumo uma única fila para cada voo? Se sim:
Presumo que o que eu disse, como a sua maneira de fazer as coisas pode sobre-reservar um voo, pois irá inserir uma nova fila quando houver no máximo 10 bilhetes e você estiver reservando 20.
Isto é algo que eu tive de fazer recentemente:
Você poderia usar a Fundir Funcionalidade para alcançar. Caso contrário, você pode fazer: