Создать триггер в SQL Server

Я потерялся, когда захотел создать триггер, используя предопределенный "CREATE TRIGGER" SQL Server 2008 R2. Не могли бы вы дать мне прямой оператор SQL, который я могу использовать для создания триггера, и рассказать мне, как определять AFTER, BEFORE и все такое?

Также, как я могу узнать строки UPDATED/INSERTED/DELETED и использовать их значения столбцов для выполнения операций внутри триггера?

Ответ 1

Базы данных ориентированы на набор и триггеры ничем не отличаются. Триггер срабатывает, когда выполняется какая-либо операция, и эта операция может влиять на несколько строк. Таким образом, вопрос "Say I want to know the Primary Key of that row" является неправильным. Может быть добавлено несколько строк.

SQL Server предоставляет две специальные таблицы для триггеров AFTER с именем inserted и deleted, которые представляют строки, которые были вставлены или удалены действием и структурированы одинаково с затронутой таблицей. Триггер обновления может заполнять как inserted, так и deleted, тогда как триггер insert только заполняет таблицу inserted.

Из комментариев:

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

Ответ на этот вопрос заключается в использовании таблицы inserted (которая, опять же, вы должны предполагать, может иметь несколько строк) для циклического перехода по строкам и отправки электронной почты. Однако я бы рекомендовал не вводить электронную почту в триггер. Вместо этого я бы рекомендовал поместить эту логику в хранимую процедуру и отправить ее по электронной почте.

Для справки: Создать триггер

Ответ 2

Основной синтаксис

CREATE TRIGGER YourTriggerName ON dbo.YourTable
FOR|AFTER INSERT, UPDATE, DELETE
AS
BEGIN
     /*Put what ever you want here*/
     UPDATE AnotherTable
          SET SomeColumn = AnotherColumn
     FROM inserted | deleted
END
GO

Ответ 3

Триггер - это процесс, основанный на событиях, который "запускается" после того, как таблица каким-то образом изменилась. Это будет на DELETE, UPDATE, INSERT и т.д. Синтаксис BEFORE и AFTER будет определять, запускать ли запуск до или после события.

Это короткая версия. Проверьте MSDN.