Potrzebuję napisać procedurę składowaną T-SQL, która aktualizuje wiersz w tabeli. Jeśli wiersz nie istnieje, włóż go. Wszystkie te kroki są zawijane przez transakcję.Sprawdź, czy istnieje wiersz, w przeciwnym razie wstaw
To jest dla systemu rezerwacji, więc musi być atomowy i niezawodny. Musi zwrócić wartość true, jeśli transakcja została zatwierdzona, a lot zarezerwowany.
Jestem nowy w T-SQL i nie wiem, jak korzystać z @@rowcount
. To jest to, co napisałem do tej pory. Czy jestem na właściwej drodze? Jestem pewien, że to dla ciebie łatwy problem.
-- 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?)
możliwy duplikat [Solu dla INSERT OR UPDATE na serwerze SQL Server (http://stackoverflow.com/questions/108403/solutions-for-insert-or-update-on-sql-server) –
powiązane pytanie - https://stackoverflow.com/ pytania/21889843/unique-constraint-vs-checking-before-insert – Steam