Witajcie
Dostałem ostatnio takie zadanie żeby stworzyć bazę danych która pomagałaby w zarządzaniu laboratoriami komputerowymi. Jedną z funkcji jaką musi posiadać ta baza jest sprawdzanie braku konfliktów między zajęciami. Zabrałem się już za to i napisałem trigger który nie działa:( , modyfikowałem go na wszystkie przychodzące mi do głowy sposoby i żadnych pozytywnych rezultatów. Ogólnie sprawa wygląda tak że po kliknięciu Execute trigger powstaje i coś nawet robi tylko, że przez to coś już nie da się dopisać żadnej rezerwacji (sali), a powinno być tak, że nie da się dopisać tylko tych rezerwacji które się czasem i miejscem pokrywają z poprzednimi. Dodam jeszcze, że za czas odpowiadają kolumny Godz_rozp i Godz_zak, a z miejsce kolumna Sala, które to znajdują się w tabeli Rezerwacje.
Jestem bardzo niedoświadczony w SQL i pewnie stąd wszystkie problemy. Zamieszczę tu poniżej kod tego triggera i proszę was o pomoc może uda wam się odkryć na czym polega z nim problem.
Create trigger [dbo].[CzyRezerwacjaJestOk]
on [dbo].[Rezerwacje]
after insert
as
Declare @NewTime time(7), @NewEndTime time(7), @Newday varchar(50), @NewSala int
select @NewTime=inserted.Godz_rozp from inserted
select @NewEndTime=inserted.Godz_zak from inserted
select @Newday=inserted.Dzien_tygodnia from inserted
select @NewSala=inserted.Sala_nr from inserted
if @NewSala = (Select Sala_nr from dbo.Rezerwacje)
begin
if @NewTime>=(select Godz_rozp from dbo.Rezerwacje where Dzien_tygodnia = @Newday) and @NewTime<(select Godz_zak from dbo.Rezerwacje where Dzien_tygodnia = @Newday)
begin raiserror ('Termin jest zajęty!',9,1) end;
if @NewEndTime>(select Godz_rozp from dbo.Rezerwacje where Dzien_tygodnia = @Newday) and @NewEndTime<=(select Godz_zak from dbo.Rezerwacje where Dzien_tygodnia = @Newday)
begin raiserror ('Termin jest zajęty!',9,1) end;
end;