我需要编写一个 T-SQL 存储过程来更新表中的一行。如果该行不存在,则插入它。所有这些步骤都包含在一个事务中。
这是一个预订系统,所以它必须是原子的和可靠的。如果事务已提交且航班已预订,则它必须返回 true。
我是T-SQL 的新手,不确定如何使用@@rowcount. 这是我迄今为止所写的。我在正确的道路上吗?我相信对你来说是一个简单的问题。
@@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?)
我假设每个航班只有一行?如果是这样的话:
IF EXISTS (SELECT * FROM Bookings WHERE FLightID = @Id) BEGIN --UPDATE HERE END ELSE BEGIN -- INSERT HERE END
我假设我说的是,因为您的做事方式可能会超额预订航班,因为当最多有 10 张机票并且您预订 20 张机票时,它会插入一个新行。