Najlepiej byłoby unikać wyzwalaczy i przed wstawieniem sprawdzić, czy istnieje
IF NOT EXISTS (SELECT TOP 1 1 FROM MyTable WHERE @InsertedEndDate > begin_date AND @InsertedBeginDate < end_date)
BEGIN
--do actual insert/work
END
To proste sprawdzenie, aby znaleźć pierwsze zachodzenie na siebie. Wybierz TOP 1 1 to sztuczka, która pozwala uniknąć faktycznego pobierania danych. Powróci, gdy tylko pasuje do wiersza, który pokrywa się z zakresem dat, który faktycznie próbujesz zapisać