Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему срабатывает триггер ? / 11 сообщений из 11, страница 1 из 1
23.08.2018, 22:28
    #39692679
Компостеров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
Добрый вечер, коллеги
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 не происходит

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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



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


The command completed with no results returned
...
Рейтинг: 0 / 0
23.08.2018, 22:35
    #39692681
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
Компостеров,

по тому что у вас срабатывает какой-то другой триггер?
...
Рейтинг: 0 / 0
23.08.2018, 22:39
    #39692683
Компостеров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
TaPaK,

Триггер на таблицу agent для Update только один
...
Рейтинг: 0 / 0
23.08.2018, 22:45
    #39692684
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
А с чего вы решили, что триггер в описанной ситуации не должен срабатывать?

В первом же абзаце в справке написано
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.
...
Рейтинг: 0 / 0
23.08.2018, 22:48
    #39692688
Компостеров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
из-за условия


update agent set info = 'aaas' where 1 = 2
...
Рейтинг: 0 / 0
23.08.2018, 22:49
    #39692689
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
КомпостеровTaPaK,

Триггер на таблицу agent для Update только один
был напуган описанием результата.. AFTER триггер не срабатыват только в случае ошибки. Нормальная практика в начале всех триггеров проверять наличие записей в inserted/deleted
...
Рейтинг: 0 / 0
23.08.2018, 22:50
    #39692690
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
автор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.
...
Рейтинг: 0 / 0
23.08.2018, 22:51
    #39692691
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
Компостеровиз-за условия


update agent set info = 'aaas' where 1 = 2Ну как и предполагалось, справку никто не читал.
...
Рейтинг: 0 / 0
23.08.2018, 22:56
    #39692694
Компостеров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
Т.е. сервер делает лишнюю операцию ?
...
Рейтинг: 0 / 0
23.08.2018, 22:57
    #39692695
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
Компостеров,

сервер делает как описано
...
Рейтинг: 0 / 0
23.08.2018, 22:58
    #39692697
Компостеров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему срабатывает триггер ?
Понятно, вопрос закрыт.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему срабатывает триггер ? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]