admin

检查一行是否存在,如果该行不存在,则插入

sql

我需要编写一个 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?)

阅读 204

收藏
2021-07-01

共1个答案

admin

我假设每个航班只有一行?如果是这样的话:

IF EXISTS (SELECT * FROM Bookings WHERE FLightID = @Id)
BEGIN
    --UPDATE HERE
END
ELSE
BEGIN
   -- INSERT HERE
END

我假设我说的是,因为您的做事方式可能会超额预订航班,因为当最多有 10 张机票并且您预订 20 张机票时,它会插入一个新行。

2021-07-01