Должен ли я добавить SET NOCOUNT ON ко всем моим триггерам?

21

Это довольно распространенное знание, что вы должны иметь

SET NOCOUNT ON   

по умолчанию при создании новых хранимых процедур.

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

Это преднамеренное или просто недосмотр?

Поврежденные товары
источник
1
Если вы когда-либо редактируете значения с помощью редактора таблиц SSMS, это требуется для триггеров, в противном случае сообщение о дополнительном количестве строк из триггера смущает его
Мартин Смит,
это скорее всего недосмотр. Также смотрите stackoverflow.com/questions/1483732/set-nocount-on-usage пожалуйста
ГБН

Ответы:

24

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

Я написал небольшую статью о том, на что нужно обратить внимание при написании триггеров, и это один из них:
http://dave.brittens.org/2012/03/29/writing-well-behaved-triggers/

TL; DR версия:

  1. Сними болтовню. Используйте NOCOUNT.
  2. Убедитесь, что ваш триггер может обрабатывать несколько строк.
  3. Предотвращение неограниченного каскадирования триггеров и рекурсии.
  4. Избегайте ужасной производительности виртуальных таблиц INSERTED и DELETED.
db2
источник
URL устарел. Вот обновленный URL: dave.brittens.org/blog/writing-well-behaved-triggers.html
Джонатон Уотни,
Хороший улов. Я только что обновил свой сайт до Пеликана пару недель назад. ;)
db2