Подключение триггера

Stanislav

Подскажите пожалуйста Можно ли один триггер подключить к различным таблицам ?
10 ответов

Stanislav

Подскажите пожалуйста Можно ли один триггер подключить к различным таблицам ?
Нет.Но можно его тело скопировать (Copy-Paste) :)Или написать ХП и ее вызывать из разных триггеров.


Stanislav

Спасибо !


Stanislav

только в хранимке не будут доступны таблицы inserted, deleted...если не ошибаюсь.


Stanislav

только в хранимке не будут доступны таблицы inserted, deleted...если не ошибаюсь.
Их всегда можно во временные таблы запихать.


Stanislav

это как? поясните.


Stanislav

это как? поясните.
select * into #tmp_inserted from inserted


Stanislav

В триггере пихаем все из виртуальных таблиц во временные и вызываем ХП. Там эти временные таблы д.б. видны.


Stanislav

Если есть BLOB-поля, то не выйдет. В этом случае можно скопировать во временные таблицы только ID записей из inserted/deleted, а в процедуре делать связку временных таблиц и реальных по этому ID. Вообще этот способ предпочтительнее и без блобов, потому что сожрет при выполнении куда меньше места и времени.


Stanislav

Если есть BLOB-поля, то не выйдет. В этом случае можно скопировать во временные таблицы только ID записей из inserted/deleted, а в процедуре делать связку временных таблиц и реальных по этому ID. Вообще этот способ предпочтительнее и без блобов, потому что сожрет при выполнении куда меньше места и времени.
А что с deleted делать?Ведь в "реальной" таблице не храняться "старые" записи?


Stanislav

Тады кирдык универсальности. Пишите личный триггер на каждую таблицу.В некоторой степени сие действо можно автоматизировать. Начиная от самописных процедур, играющих роль шаблонов до каких-нибудь третьесторонних продуктов, делающих тоже самое.Пишете такую процедуру, которая на вход принимает название таблицы, а на выходе генерит скрипт для нужного вам триггера. Потом выполняете его - и готово. Или прям там в процедуре выполняете, чтобы не морочиться с длинными текстами больше 4000 символов. В результате и универсальность имеете, и динамического кода в триггерах нет, и никаких заморочек с временными таблицами, и дублирования кода опять же нет.