Триггер UPDATE для таблицы, которая ежедневно обновляется тысячи раз для определенного набора записей - PullRequest
1 голос
/ 30 апреля 2019

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

Хотя я достаточно хорошо разбираюсь в SQL, T-SQL и триггеры находятся за пределами моей обычной игровой площадки. Я не хочу писать что-то, что будет работать постоянно и очень мало (или раздражать нашего администратора баз данных).

Похоже, что решением было бы представление, которое вытягивает только те строки, которые мне интересны, и затем создает триггер на основе этого. Кажется, что это «плохая форма», которая говорит мне, что есть лучший способ сделать то же самое.

Я ищу использование триггера, потому что я ищу изменение значения, которое, скорее всего, быстро сбрасывается. (например, он изменится на 1, а затем вернется к 0 через несколько часов).

Этот триггер будет работать на SQL SERVER EXPRESS 10.50.4000

Мне в основном просто нужно направление - не так уж много конкретного кода.

1 Ответ

5 голосов
/ 30 апреля 2019

Вы не можете создать триггер для представления, которое запускает изменения в строках базовой таблицы.

Это не проблема «плохой формы», это просто невозможно (единственными триггерами, разрешенными для представлений, являются INSTEAD OF триггеры, которые не выполняют то, что вам нужно).

Таблицапроверка триггера, если столбец изменился с 0 на 1, не должна вызывать значительных накладных расходов - особенно если вызывается только несколько тысяч раз в день.

Следует вызвать функцию UPDATE, чтобы проверить, был ли изменен интересующий столбец - и если нет, немедленно выйти.В противном случае он должен объединить таблицы INSERTED и DELETED по первичному ключу и проверить, соответствуют ли новые и старые значения для любой строки шаблону, который вы пытаетесь отследить.

...