Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Возможные проблемы при использовании динамического SQL в триггере  [new]
Potential problem
Guest
Ситуация: реализован аудит DML в виде триггеров. В каждом триггере для каждой таблицы список полей вхардкоден в теле триггера, что неудобно - при добавлении поля в таблицу надо не забыть прописать его в триггере, и тем более нужно внести соотв. правки перед удалением поля из таблицы, иначе триггер будет выбрасывать исключение. Решил извлекать нужные поля для записи в таблицу логирования с помощью динамического SQL (запрос к inserted по информации из INFORMATION_SCHEMA.COLUMNS), но меня терзают сомнения относительно того, что в динамическом SQL не работает ownership chaining - чем это может быть чревато?
22 июн 15, 06:57    [17800494]     Ответить | Цитировать Сообщить модератору
 Re: Возможные проблемы при использовании динамического SQL в триггере  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Potential problem
Ситуация: реализован аудит DML в виде триггеров. В каждом триггере для каждой таблицы список полей вхардкоден в теле триггера, что неудобно - при добавлении поля в таблицу надо не забыть прописать его в триггере, и тем более нужно внести соотв. правки перед удалением поля из таблицы, иначе триггер будет выбрасывать исключение.
Поля по любому "вхаркодены" в разнообразный код на сервере и клиенте.

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

Динамический SQL, кроме траблов с правами, ещё и замедлит работу, т.к. вы получите лишнюю компиляцию.
Кроме того, хотел бы я посмотреть на обращение к inserted/deleted из динамического SQL :-) Так что придётся ещё и переливать данные во временную таблицу, что тоже не добавит производительности.
22 июн 15, 09:01    [17800703]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить