Проблема заключается в том, что проверочное ограничение оценивается после вставки записи, что изменяет возвращаемое значение функции, поскольку оно является самоссылочным. Как это настроено, если у вас пустая таблица, невозможно вставить в нее какие-либо записи.
Это потому, что после вставки записи
NOT EXISTS (SELECT * FROM absenteeism WHERE EMP_ID = @emp_ID)
никогда не будет правдой. И при первой вставке для конкретного сотрудника
EXISTS (
SELECT *
FROM absenteeism2
WHERE DateDiff(DAY, @leaveDate, Absent_Date) = -1
AND EMP_ID = @emp_ID)
никогда не может быть правдой, поскольку для этого сотрудника нет других записей. Наконец
EXISTS (
SELECT *
FROM Absenteeism2
WHERE DateDiff(DAY, @leaveDate, Absent_Date) < -1
)
может быть истинным, только если в таблице уже отсутствуют дни, предшествующие. Если вы не можете вставить более одной записи для сотрудника, потому что первые два условия не могут быть истинными, третье условие никогда не может вступить в действие.
Возможно, вы хотите исключить (только что вставленный) отсутствующий день из первого условия
NOT EXISTS (
SELECT *
FROM absenteeism
WHERE EMP_ID = @emp_ID
AND Absent_Date <> @leaveDate)