Мне нужно написать хранимую процедуру T-SQL, которая обновляет строку в таблице. Если строка не существует, вставьте ее. Все эти шаги завершаются транзакцией.Проверьте, существует ли строка, иначе вставьте
Это для системы бронирования, поэтому она должна быть атомной и надежной. Он должен вернуть значение true, если транзакция была совершена, и рейс забронирован.
Я новый для T-SQL, и не уверен, как использовать @@rowcount
. Это то, что я написал до сих пор. Я на правильном пути? Я уверен, что это легкая проблема для вас.
-- 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?)
Возможный дубликат [Solu для INSERT или UPDATE на SQL Server] (http://stackoverflow.com/questions/108403/solutions-for-insert-or-update-on-sql-server) –
связанный вопрос - https://stackoverflow.com/ вопросы/21889843/unique-constraint-vs-check-before-insert – Steam