Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Триггер / 7 сообщений из 7, страница 1 из 1
20.09.2001, 12:19
    #32014472
Demon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер
Кто знает, как узнать какой триггер сработал.
В триггере я вызываю хранимую процедуру, которой передаю параметр, а переменную параметра определяю как
select @a = a from inserted. Но у меня триггер на insert,update,delete. Как указать из какой таблицы (inserted/deleted) мне брать переменную.
...
Рейтинг: 0 / 0
20.09.2001, 12:31
    #32014473
Pandre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер
select @a = a from inserted
if @a is NULL select @a = a from deleted -- значит DELETE сработал
if @a is NULL -- значит конец света
...
Рейтинг: 0 / 0
20.09.2001, 12:40
    #32014475
Триггер
> select @a = a from inserted
> if @a is NULL select @a = a from deleted -- значит DELETE сработал
> if @a is NULL -- значит конец света

Гы. А это вполне реальная и штатная ситуация, когда в триггере inserted и deleted не содержат ни одной записи одновременно.
...
Рейтинг: 0 / 0
20.09.2001, 12:44
    #32014476
Pandre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер
Такого не бывает, но может быть что поле "a" действительно вставляется/удаляется как NULL.
Поэтому лучше
if exists(select count(*) from Inserted) -- INSERT или UPDATE
else -- DELETE
...
Рейтинг: 0 / 0
20.09.2001, 12:54
    #32014479
Триггер
Бывает
...
Рейтинг: 0 / 0
20.09.2001, 13:00
    #32014481
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер
Вообще-то и insert, и update, и delete могут выполняться с условиями, которые не затронут ни одну запись, поэтому ориентироваться на содержимое таблиц inserted и deleted нельзя. Не проще ли в вызываемую процедуру добавить параметр 'TriggerKind' и устанавливать его в 0, 1 или 2 в триггере при вызове вышеупомянутой процедуры ?
...
Рейтинг: 0 / 0
20.09.2001, 13:08
    #32014484
Pandre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер
Согласен бывает, сглупил, поэтому надо так

if exists(select count(*) from Inserted) and exists(select count(*) from Deleted) -- UPDATE
else if exists(select count(*) from Inserted) -- INSERT
else if exists(select count(*) from Deleted) -- DELETE
else -- нефиг было меня вызывать
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Триггер / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]