T-SQL Problem z porównywaniem dat

0

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 ?

0

I tak warunek jest zły, bo nie obsługujesz przypadku kiedy wstawiany przedział mieści się w już istniejącym, np. istniejący [1; 6], a wstawiany [2;3].
1 between 2 i 3 = false
6 between 2 i 3 = false

Czemu chcesz trigger użyć, nie lepiej wywołać procedurę składowaną w transakcji, która sprawdzi czy możliwe jest wstawienie rekordu, jeśli tak to zrobi, inaczej sypnie błędem.
Co znaczy "trigger mi się zatrzaskuje"? Leci deadlock? Jeśli tak to na czym?

0

Niestety projekt (uczelnia) zakłada użycie triggera :)
Dzięki za słuszną sugestię dot. błędu - masz rację, nie pomyślałem o takim przypadku. Ale to akurat niewielki problem, potem się tym zajmę.
Co do 'zatrzaskiwania' - po prostu mam na myśli to, że nie pozwala dodać (spełniony warunek IF i rollback)

Żeby było wiadomo o co chodzi, załączam screen:
user image

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