У меня есть следующий триггер:
CREATE TRIGGER Users_Delete
ON Users
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
-- Patients
UPDATE Patients SET ModifiedByID=NULL WHERE ModifiedByID=ID;
UPDATE Patients SET CreatedByID=NULL WHERE CreatedByID=ID;
UPDATE Patients SET DeletedByID=NULL WHERE DeletedByID=ID;
END
Мне было интересно, есть ли способ «объединить» эти три оператора UPDATE во что-то вроде следующего:
UPDATE Patients SET
(ModifiedByID=NULL WHERE ModifiedByID=ID) OR
(CreatedByID=NULL WHERE CreatedByID=ID) OR
(DeletedByID=NULL WHERE DeletedByID=ID);
Мне бы очень хотелось иметь только одно заявление для повышения производительности.
Причина, по которой я использую триггер вместо ON DELETE
для FOREIGN KEY
, заключается в том, что я получаю ошибку, что наличие более одного ON DELETE
вызывает следующую ошибку:
Введение ограничения FOREIGN KEY 'FK_Patients_Users_Deleted' в таблицу 'Patients' может
вызвать циклы или несколько каскадных путей. Укажите УДАЛИТЬ НЕТ ДЕЙСТВИЙ или ОБНОВИТЬ НЕТ
ДЕЙСТВИЯ или измените другие ограничения FOREIGN KEY.
РЕДАКТИРОВАТЬ: было бы хорошо иметь индексы для всех столбцов ModifiedByID, CreatedByID, DeletedByID? Удаление пользователя, конечно, будет редкостью, поэтому стоит ли добавлять индексы в 3 столбца?