Anonymný používateľ
Viac na
Skontrolujte, či existuje riadok, inak vložte
Potrebujem napísať uloženú procedúru T-SQL, ktorá aktualizuje riadok v tabuľke. Ak riadok neexistuje, vloží ho. Všetky tieto kroky zabalí transakcia.
Je to pre rezervačný systém, takže to musí byť atomické a spoľahlivé. Musí vrátiť true, ak bola transakcia vykonaná a let bol rezervovaný.
Som nováčikom v T-SQL a nie som si istý, ako použiť @@rowcount
. Doteraz som napísal toto. Som na správnej ceste? Som si istý, že je to pre vás jednoduchý problém.
-- 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
Predpokladám, že pre každý let je určený jeden riadok? Ak áno:
Predpokladám to, čo som povedal, pretože váš spôsob môže spôsobiť prebookovanie letu, keďže vloží nový riadok, keď je k dispozícii maximálne 10 leteniek a vy rezervujete 20.
Toto som musel urobiť len nedávno:
Na dosiahnutie tohto cieľa môžete použiť funkciu Zlúčenie. Inak môžete urobiť: