Niedziałający trigger

0

Witam!
Stworzyłem na potrzeby projektu bazę danych firmy wynajmującej samochody. Niestety mam problem z prawidłowym działaniem triggera sprawdzającego podczas wynajmowania kolejnego samochodu, czy ten samochód nie jest już wynajęty. Stworzyłem widok o nazwie zajete, w którym wyświetlają się id wynajętych pojazdów. Problem objawia się tym, że każdy samochód (nawet aktualnie niewynajmowany) jest traktowany jako zajęty. Mógłby ktoś sprawdzić w czym tkwi problem?

Treść triggera:

use baza
go
create trigger czywolny after insert on wynajem
as
declare @idauta int
select @idauta=inserted.auto_id from INSERTED
if exists (select * from zajete where auto_id=@idauta)
begin
print 'Pojazd zajęty.'
rollback
end
else
print 'Pojazd wolny.'
 
0

A widok na czym jest zbudowany? Na tabeli wynajem? Jeśli tak to nigdy nie będzie działąć bo widok do czasu rollbacka również będzie posiadać ten wstawiony rekord dlatego, że trigger jest after. Zatem rekord jest wstawiany do tabeli i jest również w widoku. Trigger sprawdza w widoku i warunek jest spełniony zatem wycofuje transakcje.
Jeśli widok jest na tabeli to po pierwsze jest bez sensu, po drugie jeśli już to użyj trigera INSTEAD OF

1 użytkowników online, w tym zalogowanych: 0, gości: 1