Ok, так что моя схема такова:SQL Server ЕСЛИ НЕ СУЩЕСТВУЕТ Использование?
Таблица: Timesheet_Hours
Колонки:
- Timesheet_Id (PK, INT)
- Staff_Id (интермедиат)
- BookedHours (интермедиат)
- Отправленный_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
Это 1 название столбца в таблице Timesheet_Hours? – SirDemon
Нет, это не так. Поскольку я использую EXISTS, я просто следил за тем, что я считал стандартной практикой в подзапросах с использованием EXISTS. –
1 в этом случае является константой. Все, о чем он заботится, это то, что возвращается строка, а не значение любых столбцов. Использование константы обычно быстрее, чем использование * или определенного списка столбцов. – Rick