Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как создать триггер на событие INSERT, с INSERTом на таблцу в которой срабатывает триггер?  [new]
elshad82
Member

Откуда:
Сообщений: 89
Здравствуйте.

Нужно написать триггер на событие ИНСЕРТ в таблице ТАБЛ1, чтоб при вводе данных в эту таблицу срабатывал триггер и копировал эти данные смодифицировав опять же в таблицу ТАБЛ1.
Как сделать ИНСЕРТ и как модифицировать я знаю. Проблема в том что если при срабатывании триггера данные будут вноситься опять же в эту таблицу, то триггер заново сработает. И так до бесконечности.

Как можно сделать чтоб триггер срабатывал лишь при определенном условии что если поле КОЛ1 = 1? Данные будут модифицированы и введены опять в поле КОЛ1 со значением 0. Так как 0 не удовлетворяет условию триггера, повторного запуска триггера не будет.

Мой вариант:

CREATE TRIGGER ON table1
FOR INSERT
AS
INSERT INTO table1
SELECT FROM inserted 0, col2, col3,.........
WHERE col1 = 1

Так сработает?
27 июл 12, 01:29    [12922609]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на событие INSERT, с INSERTом на таблцу в которой срабатывает триггер?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Сделайте instead of insert.
27 июл 12, 01:31    [12922610]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на событие INSERT, с INSERTом на таблцу в которой срабатывает триггер?  [new]
elshad82
Member

Откуда:
Сообщений: 89
Гавриленко Сергей Алексеевич
Сделайте instead of insert.


Прочитал вот тут Триггеры INSTEAD OF INSERT
http://msdn.microsoft.com/ru-ru/library/ms175089%28v=sql.105%29.aspx

но не понял синтаксиса. И не понял какова логика у INSTEAD OF INSERT, как срабатывает?
27 июл 12, 01:36    [12922614]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на событие INSERT, с INSERTом на таблцу в которой срабатывает триггер?  [new]
elshad82
Member

Откуда:
Сообщений: 89
То есть если я вместо кода

CREATE TRIGGER ON table1
FOR INSERT
AS
INSERT INTO table1
SELECT FROM inserted 0, col2, col3,.........
WHERE col1 = 1

напишу

CREATE TRIGGER ON table1
FOR INSTEAD OF INSERT
AS
INSERT INTO table1
SELECT FROM inserted 0, col2, col3,.........

то триггер повторно не сработает? Так как скопирует эти данные в таблицу команда INSTEAD OF INSERT а не INSERT. Правильно рассуждаю?

или все же условие WHERE col1 = 1 необходимо ставить?
27 июл 12, 01:51    [12922625]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на событие INSERT, с INSERTом на таблцу в которой срабатывает триггер?  [new]
elshad82
Member

Откуда:
Сообщений: 89
каков синтаксис у INSTEAD OF INSERT? Как у INSERT-а
27 июл 12, 09:05    [12923074]     Ответить | Цитировать Сообщить модератору
 Re: Как создать триггер на событие INSERT, с INSERTом на таблцу в которой срабатывает триггер?  [new]
hoha_ftf
Member

Откуда: ЕКБ
Сообщений: 42
elshad82,

"An AFTER trigger does not call itself recursively unless the RECURSIVE_TRIGGERS database option is set."
27 июл 12, 09:58    [12923348]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить