Как я могу написать триггер INSTEAD OF INSERT, который устанавливает один столбец для любой таблицы?

Я работаю над устаревшим приложением, которое расширяется для работы в мультитенантной конфигурации. Базовая архитектура берет старое приложение и добавляет столбец StoreID в каждую таблицу. Затем каждый клиент видит устаревшие таблицы через набор представлений, которые фильтруют по идентификатору магазина, например:

create view AcmeBatWings.data as 
select * from dbo.data d where d.StoreId = 99

Это немного интереснее, но это упрощает вопрос.

Теперь я могу создать триггер, подобный этому

create trigger tr_Tenant_fluff on AcmeBatWings
instead of insert
as
insert into AcmeBatWings (Name, StoreId)
select i.Name, 99 from inserted i

Предполагая простую таблицу со столбцами Name и StoreId.

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

Итак, как можно написать триггер, который просто говорит при каждой вставке или обновлении, устанавливать поле StoreId на 99 для любой таблицы с StoreId?

Спасибо за помощь новичку в SQL!

9
задан Ukko 8 September 2010 в 20:52
поделиться