Я заблудился, когда я хотел создать триггер с помощью предопределенного "CREATE TRIGGER" SQL Server 2008 R2. Вы могли дать мне прямой SQL-оператор, который я могу использовать, чтобы создать триггер и сказать мне, как определить ПОСЛЕ, ПРЕЖДЕ, и все это?
Кроме того, как я могу знать строки, ОБНОВЛЕННЫЕ/ВСТАВЛЕННЫЕ/УДАЛЕННЫЕ, и использовать их значения столбцов, чтобы сделать операции в триггере?
Базы данных ориентированы на наборы, и триггеры ничем не отличаются. Триггер срабатывает, когда выполняется заданная операция, и эта операция может повлиять на несколько строк. Таким образом, вопрос «Скажем, я хочу узнать первичный ключ этой строки»
неверен. Может быть вставлено несколько строк.
SQL Server предоставляет две специальные таблицы для триггеров AFTER с именами вставлено
и удалено
, которые представляют строки, которые были вставлены или удалены действием и имеют структуру, идентичную затрагиваемой таблице. Триггер обновления может заполнять как вставленный
, так и удаленный
, тогда как триггер вставки заполняет только таблицу вставленный
.
Из комментариев:
но получатель электронной почты будет определен на основе значения во второй таблице, где идентификатор внешнего ключа находится в первой таблице (которая имеет триггер.
Ответ на это вопрос состоит в том, чтобы использовать вставленную таблицу
(которая, как вы должны предположить, может иметь несколько строк) для циклического перебора строк и отправки электронного письма. Однако я бы рекомендовал не включать логику электронной почты в триггер. Вместо этого, Я бы рекомендовал поместить эту логику в хранимую процедуру и отправить электронное письмо оттуда.
Для справки: Create Trigger
Триггер - это процесс, основанный на событиях, который «запускается» после того, как таблица каким-либо образом изменяется. Это будет при УДАЛЕНИИ, ОБНОВЛЕНИИ, ВСТАВКЕ и так далее. Ваш синтаксис BEFORE и AFTER будет определять, запускать ли триггер до или после фиксации события.
Это краткая версия. Ознакомьтесь с MSDN .
Базовый синтаксис -
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