Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 TRIGGERS и тонкости их работы?  [new]
ughunter
Member

Откуда: Владивосток
Сообщений: 132
Здравствуйте!
Имеется сервер Microsoft SQL Server 2016 (SP2-GDR) (KB4293802) - 13.0.5081.1 (X64)
На событие INSERT в таблице создан триггер.
И вот вопрос: он срабатывает на добавление каждой записи? Т.е. добавили 10 записей (чисто теоретически абсолютно одновременно) - сервер запустит 10 экземпляров триггера или запустит один и в таблице INSERTED будет рекорд-сет?

Грубо говоря - всегда ли таблица INSERTED содержит только одну запись или может быть ситуация когда там 1 и более?

Спасибо!
15 дек 19, 13:44    [22040657]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50842
ughunter
он срабатывает на добавление каждой записи?

А посмотреть в документацию и увидеть "statement"?.. Он срабатывает за выполнение запроса INSERT.
15 дек 19, 14:52    [22040674]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
ughunter
Member

Откуда: Владивосток
Сообщений: 132
Dimitry Sibiryakov,

Не понял ответа. Я же о другом спрашивал.
15 дек 19, 15:01    [22040678]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1527
ughunter
Здравствуйте!
Имеется сервер Microsoft SQL Server 2016 (SP2-GDR) (KB4293802) - 13.0.5081.1 (X64)
На событие INSERT в таблице создан триггер.
И вот вопрос: он срабатывает на добавление каждой записи? Т.е. добавили 10 записей (чисто теоретически абсолютно одновременно) - сервер запустит 10 экземпляров триггера или запустит один и в таблице INSERTED будет рекорд-сет?
1(один) раз, то есть таки Dimitry Sibiryakov ответил на поставленный вами вопрос сообщив вам про statement. Срабатывает на оператор, а не на количество записей в результате.

Грубо говоря - всегда ли таблица INSERTED содержит только одну запись или может быть ситуация когда там 1 и более?

Спасибо!
Считайте что там ВСЕГДА больше одной записи. Это хоть и виртуальная, но таки таблица.
15 дек 19, 16:43    [22040703]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
ughunter
запустит один и в таблице INSERTED будет рекорд-сет?
Да.
ughunter
может быть ситуация когда там 1 и более?
Нет, там 0 или более.
15 дек 19, 18:12    [22040741]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
ughunter,

и, кстати, не используйте @@ROWCOUNT вначале триггера для определения количества записей,
ибо это сработает неправильно в MERGE, если часть записей вставляется, а другая апдейтится или удаляется.
15 дек 19, 19:25    [22040758]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
ughunter
Member

Откуда: Владивосток
Сообщений: 132
Sergey Sizov,

автор
Считайте что там ВСЕГДА больше одной записи. Это хоть и виртуальная, но таки таблица.


т.е. если я правильно понял лучше всего в триггере использовать курсор на таблицу INSERTED ?
15 дек 19, 20:12    [22040774]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
ughunter
Member

Откуда: Владивосток
Сообщений: 132
iap,

Спасибо! Буду иметь ввиду
15 дек 19, 20:13    [22040775]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
ughunter
Sergey Sizov,

автор
Считайте что там ВСЕГДА больше одной записи. Это хоть и виртуальная, но таки таблица.


т.е. если я правильно понял лучше всего в триггере использовать курсор на таблицу INSERTED ?
Лучше всего использовать обычные команды SQL для таблиц deleted и inserted.
В том числе и самые обычные предикаты в JOIN и WHERE.
Курсоры требуются невероятно редко.
15 дек 19, 20:45    [22040785]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
iap
ughunter
Sergey Sizov,

пропущено...


т.е. если я правильно понял лучше всего в триггере использовать курсор на таблицу INSERTED ?
Лучше всего использовать обычные команды SQL для таблиц deleted и inserted.
В том числе и самые обычные предикаты в JOIN и WHERE.
Курсоры требуются невероятно редко.
Чуть не забыл! Если не объявлять в триггере скалярные переменные, то скорее всего всё будет хорошо!
Я, например, их объявляю, если туда надо поместить сообщение об ошибке перед выходом из триггера.
И это сообщение формируется в разных частях триггера. Ну и т.п.
Без этого можно и обойтись, правда?
15 дек 19, 20:48    [22040787]     Ответить | Цитировать Сообщить модератору
 Re: TRIGGERS и тонкости их работы?  [new]
ughunter
Member

Откуда: Владивосток
Сообщений: 132
Спасибо. Ситуация более менее прояснилась.
15 дек 19, 21:09    [22040790]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить