Я изучаю триггер для сравнения значений (триггер жесткий lol)
У меня возникают проблемы с проверкой идентификатора, который должен быть внутри inserted
Например, скажем, у нас естьтаблица testTb1
со строками данных:
|id|section_id|current_num_student|max_num_student|
|1 |1 | 23 | 23 |
|2 |3 | 21 | 29 |
|3 |5 | 50 | 50 |
current_num_student
- это число учеников в классе, а max_num_student
- максимум в классе.max_num_student
будет определяться учителем, поэтому это могут быть любые числа.
Теперь ученик хочет добавить раздел 5, однако current_num_student
равен max_num_student
.Поэтому мы должны отклонить студента.
Запрос в jsp-файле похож на ..
update testTb1
SET current_num_student = current_num_student + 1
WHERE section_id = ?
"?"будет вводить данные пользователем в jsp.
Поэтому я пытался сделать триггер, например ..
ALTER TRIGGER testTrg
on dbo.testTb1
AFTER UPDATE
AS
if EXISTS(select * FROM inserted FULL JOIN dbo.testTb1 m ON
m.section_id = inserted.section_id AND m.num_cur = m.num_max)
Begin
RAISERROR ('Can not update data because class is full', 16,1);
rollback tran
END
Когда я вручную использую запрос для проверки вначале, бывает, что возвращается сообщение об ошибке
UPDATE mydata.dbo.testTb1
SET num_cur = num_cur + 1
WHERE section_id = 1
Я получаю сообщение, такое как
Msg 50000, Уровень 16, Состояние 1, Процедура testTrg, Строка 9
Невозможно обновить данные, поскольку класс заполнен Msg3609, уровень 16, состояние 1, строка 19 Транзакция завершилась в триггере.Пакет был прерван.
Однако, когда я пытался
UPDATE mydata.dbo.testTb1
SET num_cur = num_cur + 1
WHERE section_id =3
, который должен иметь значение NO ERROR (должно увеличиваться current_num_student
)
Сообщение 50000, Уровень 16, Состояние 1, Процедура testTrg, Строка 9
Невозможно обновить данные, так как класс заполнен
Сообщение 3609, Уровень 16, Состояние 1, Строка 1
Транзакция завершилась в триггере.Пакет был прерван.
Поэтому я предполагаю, что inserted.section_id
не содержит никакого значения.
Однако я не совсем уверен, что мои предположения верны или нет.
Если мой синтаксис триггера неверен, вы можете сказать мне ту часть, которую мне нужно исправить?
или
, если синтаксис триггера правильный, подскажите способ печати значения inserted.section