Witam,
Mam następujący problem: napisałem sobie taki drobny trigger który wg tabeli ma sprawdzać, czy kierowca jest już zajęty (i w związku z tym czy nie można mu zlecić wyjazdu). Niestety, problem w tym, że jakiego przedziału czasowego nie wpiszę kiedy kierowca zajęty nie jest, trigger mi się zatrzaskuje. Kod jest następujący:
CREATE TRIGGER tKierowcy_zajeci
ON Wyjazdy AFTER INSERT AS
IF EXISTS ( SELECT * FROM inserted i JOIN wyjazdy w ON i.kierowca = w.kierowca
WHERE (w.data_godzina_wyjazdu BETWEEN i.data_godzina_wyjazdu AND i.data_godzina_powrotu)
OR (w.data_godzina_powrotu BETWEEN i.data_godzina_wyjazdu AND i.data_godzina_powrotu) )
BEGIN
PRINT N'Kierowca jest juz w tym czasie zajety!';
ROLLBACK
END
GO
data_godzina_wyjazdu oraz data_godzina_powrotu to pola typu SMALLDATETIME.
Żeby było śmieszniej - jeżeli 'wyciągnę' klauzulę która jest zawarta w
IF EXISTS ( )
i zamiast tabeli inserted zastosuję jakąś tabelę identyczną (prócz nazwy) z tabelą Wyjazdy gdzie wstawię nowy rekord (który w przypadku próby dodania do tabeli Wyjazdy powodował zatrzaśnięcie się triggera), to klauzula ta ... zwraca pustą tabelę.
Co o tym sądzicie? Gdzie jest błąd, bądź czy istnieje jakiś lepszy sposób porównywania dat ?