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

Откуда:
Сообщений: 302
Добрый вечер, коллеги
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64)
Aug 19 2014 12:21:34
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)



Кто может объяснить - почему срабатывает триггер , хотя Update не происходит

CREATE TRIGGER dbo.tu_agent
ON dbo.agent
FOR update AS
BEGIN 

    select 'Начало' as msg, getdate() as dt, (select count(*) from inserted) as cnt_inserted, (select count(*) from deleted) as cnt_deleted
END
go

-- Невыполнимое условие

update agent set info = 'aaas' where 1 = 2


Результат
msg	               dt	                           cnt_inserted	cnt_deleted	   
Начало 23.08.2018 10:23:47.350 PM 0 0


The command completed with no results returned

Сообщение было отредактировано: 23 авг 18, 22:43
23 авг 18, 22:28    [21652509]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Компостеров,

по тому что у вас срабатывает какой-то другой триггер?
23 авг 18, 22:35    [21652513]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
Компостеров
Member

Откуда:
Сообщений: 302
TaPaK,

Триггер на таблицу agent для Update только один
23 авг 18, 22:39    [21652516]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36900
А с чего вы решили, что триггер в описанной ситуации не должен срабатывать?

В первом же абзаце в справке написано
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql?view=sql-server-2017
DML triggers execute when a user tries to modify data through a data manipulation language (DML) event. DML events are INSERT, UPDATE, or DELETE statements on a table or view. These triggers fire when any valid event is fired, regardless of whether or not any table rows are affected.


Сообщение было отредактировано: 23 авг 18, 22:50
23 авг 18, 22:45    [21652518]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
Компостеров
Member

Откуда:
Сообщений: 302
из-за условия


update agent set info = 'aaas' where 1 = 2
23 авг 18, 22:48    [21652524]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Компостеров
TaPaK,

Триггер на таблицу agent для Update только один

был напуган описанием результата.. AFTER триггер не срабатыват только в случае ошибки. Нормальная практика в начале всех триггеров проверять наличие записей в inserted/deleted
23 авг 18, 22:49    [21652525]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
автор
AFTER specifies that the DML trigger is fired only when all operations specified in the triggering SQL statement have executed successfully. All referential cascade actions and constraint checks also must succeed before this trigger fires.

23 авг 18, 22:50    [21652527]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36900
Компостеров
из-за условия


update agent set info = 'aaas' where 1 = 2
Ну как и предполагалось, справку никто не читал.
23 авг 18, 22:51    [21652528]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
Компостеров
Member

Откуда:
Сообщений: 302
Т.е. сервер делает лишнюю операцию ?
23 авг 18, 22:56    [21652532]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Компостеров,

сервер делает как описано
23 авг 18, 22:57    [21652533]     Ответить | Цитировать Сообщить модератору
 Re: Почему срабатывает триггер ?  [new]
Компостеров
Member

Откуда:
Сообщений: 302
Понятно, вопрос закрыт.
23 авг 18, 22:58    [21652535]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить