Поведение триггеров «AFTER INSERT, UPDATE» в SQL Server - PullRequest
1 голос
/ 28 ноября 2010

В SQL Server 2008 у меня есть сценарий, в котором у меня есть таблица со сложной проверкой при вставке / обновлении.Это включает необходимость временного преобразования входных данных XML в таблицу для проверки его данных по постоянной таблице.

Однако у меня также есть сценарий, в котором я часто обновляю простые целочисленные столбцы, которые не требуют проверки.Из того, что я прочитал здесь , кажется, что SQL Server будет возвращать всю строку в таблице «вставленных» временных файлов в память, а не только затронутые столбцы, когда я выполняю обновление.Если это так, то это означает, что для каждого простого целочисленного обновления, которое я выполняю, сложная проверка XML будет выполняться без необходимости.

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

1 Ответ

3 голосов
/ 28 ноября 2010

Да, во-первых, триггеры сработают для операции КАЖДЫЙ ВСТАВКА или ОБНОВЛЕНИЕ - вы не можете ограничить это срабатыванием только при воздействии на определенные столбцы.Вы можете проверить внутри триггера, чтобы увидеть, были ли затронуты определенные столбцы, и принять решение на его основе - но вы не можете предотвратить запуск триггера во-первых.

И во-вторых, да, когда триггерПри возникновении ошибки вы получите ВСЕ столбцы базовой таблицы в псевдостолях INSERTED и / или DELETED.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...