Итак, моя схема такова:
Таблица: Timesheet_Hours
Столбцы:
- Timesheet_Id (PK, int)
- Staff_Id (int)
- BookedHours (int)
- Добавлено_Flag (boolean)
Это чрезвычайно упрощенная версия таблицы, но она будет служить для целей этого объяснения. Предположим, что у человека может быть только одна запись в расписании.
То, что я пытаюсь сделать, это добавить записи в другую таблицу, называемую WorkLog. У каждой записи есть время, связанное с ней. Когда эта таблица обновляется, я хочу также обновить Timesheet_Hours.
Прежде чем обновлять Timesheet_Hours, я хочу сначала проверить, что соответствующие расписания еще не были опубликованы, а затем я хочу проверить, действительно ли на самом деле есть запись для обновления.
Первая часть инструкции if, которая проверяет, что расписания еще не отправлены, работает нормально. Проблема заключается в второй части. Это checkint, чтобы увидеть, что запись, которую он собирается обновить, уже существует. Проблема в том, что он всегда вызывает ошибку.
NB: приведенный ниже код извлекается из хранимой процедуры, запускаемой триггерами обновления, вставки и удаления в таблице WorkLog. @PersonID является одним из параметров этой таблицы. Хранимая процедура работает нормально, если я прокомментирую вторую часть этого утверждения.
IF EXISTS
(
SELECT 1
FROM Timesheet_Hours
WHERE Posted_Flag = 1
AND Staff_Id = @PersonID
)
BEGIN
RAISERROR('Timesheets have already been posted!', 16, 1)
ROLLBACK TRAN
END
ELSE
IF NOT EXISTS
(
SELECT 1
FROM Timesheet_Hours
WHERE Staff_Id = @PersonID
)
BEGIN
RAISERROR('Default list has not been loaded!', 16, 1)
ROLLBACK TRAN
END