Можно ли создать и выполнить 2 триггера на одной таблице? - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь найти обходной путь для создания и выполнения нескольких триггеров для разных таблиц в одной таблице.У меня есть 2 таблицы

  • Сведения о человеке
  • Адрес

Способ создания этой таблицы - когда пользователь обновляет адрес человека, он создает новую запись вадресную таблицу вместо обновления существующей, и я хочу вставить изменения в таблицу аудита, когда пользователь обновляет данные о человеке или адрес.

Мне удалось создать триггер для таблицы сотрудников, но я не знаю, как я могу сделатьон работает с использованием или вызовом нескольких триггеров для таблицы Person

Ниже приведен код для триггера обновления таблицы Person

 CREATE TRIGGER [dbo].[tr_tblPersonDetail_ForUpdate]
 ON  [dbo].[PersonDetail]
 FOR Update
AS 
BEGIN
Declare @Id int,                          
Declare @OldFirstName varchar(50), @NewFirstName varchar(50)

BEGIN

     Select @Id=personId,@NewFirstName = NewFirstName from Inserted

     select @OldFirstName = NewFirstName from deleted where @id = personId

  if(@OldFirstName <> @NewFirstName )
  Insert into AuditLog values('some value','AfterValue','Before Value')

1 Ответ

0 голосов
/ 12 июня 2018

Да, одна таблица может иметь несколько триггеров.Однако вам нужно проявлять осторожность - вы можете не захотеть, чтобы каждое обновление запускало оба триггера, или вам может потребоваться запускать триггеры в определенном порядке.

Это действительно звучит так, как будто вы хотите INSTEAD OF UPDATEтриггер по требованию

создает новую запись в адресную таблицу вместо обновления существующей

Если вам нужно, чтобы ваш триггер выполнялся только при наличии определенных полейбыли обновлены, используйте UPDATED() для их проверки.

Вы можете использовать sp_settriggerorder, чтобы указать, какой триггер должен выполняться, а какой последним.

В вашем случае я бы предложил AFTER UPDATE для любой операции, которая изменяет только имя человека, а затем INSTEAD OF UPDATE, которая обрабатывает случаи, когда адрес изменяется (что также должно будет обрабатывать изменение имени).

Если вы решите продолжить использование триггеров вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...