У меня есть бизнес-правило в моей базе данных, в котором говорится, что идентификатор должен соответствовать списку определенных идентификаторов, чтобы быть действительным. Я не могу использовать ограничение CHECK в этом экземпляре, так как требует подзапроса для поиска действительных идентификаторов, поэтому мне нужно использовать триггер.Выбор между триггером INSTEAD OF/AFTER и UDF
Проще говоря, для того, чтобы запись, чтобы вставить в таблицу А. Поле ИД (числовое) в таблице А должен присутствовать в таблицах B или C.
я мог однако использовать скалярную UDF, чтобы проверить если идентификатор действителен, но это похоже на нарушение функции. Я уже несколько раз делал это в своей базе данных, и хотя он работает, он просто выглядит «неправильно».
Возвращаясь к триггерам, я не могу решить, какой триггер мне понадобится использовать в этом случае, поскольку оба они работают, за исключением того, что ошибка поймана на разных этапах.
Использование триггера INSTEAD OF поймает неверный идентификатор до того, как он будет вставлен/обновлен, но код для этого триггера немного сложнее. (Принимает 12 переменных и длинный громоздкий оператор INSERT)
Триггер AFTER выполняет ту же задачу, но ошибка поймается после того, как строка вставлена, а затем операция откат.
Теперь, несмотря на то, что все три этих подхода работают, один из них должен быть более «подходящим» для задачи?
Триггеры обычно используются для обновления/удаления/операций вставки, и вы хотите, чтобы проверить действительный идентификатор перед тем вкладышем. используйте UDF или подзапрос, чтобы проверить, например: if @id in (выберите myid from mytable) начало Начало --do ваша бизнес-логика end –
Это то, что я делал раньше в базе данных, просто не был уверен, общепринятый способ сделать это. – Jake