Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Rollback в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
по отретьему rollback в триггере вызывает ошибку в 2008

А вы ее текст прочитали ? Тем более что это не ошибка, а предупреждение

Сообщение было отредактировано: 14 янв 16, 12:28
14 янв 16, 12:27    [18677476]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
maldalik
Member

Откуда:
Сообщений: 63
Glory
maldalik
по отретьему rollback в триггере вызывает ошибку в 2008

А вы ее текст прочитали ? Тем более что это не ошибка, а предупреждение


Читал, но веб приложение воспринимает его как ошибку. И я честно говоря не знаю что ответить веб девелоперам,
когда они указывают на возвращаемую ошибку.
14 янв 16, 12:30    [18677496]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
iap
Member

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

игнорировать ошибки с сообщениями, в которых есть слово "warning"?
14 янв 16, 12:32    [18677520]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
но веб приложение воспринимает его как ошибку.

Если написанное вами приложение не отличает, что оно получает от сервера, то это проблемы вашего приложения

maldalik
И я честно говоря не знаю что ответить веб девелоперам,
когда они указывают на возвращаемую ошибку.

Застаить их задуматься над тем, что не все, что возвращает сервер, является ошибкой.
14 янв 16, 12:33    [18677525]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
maldalik
Member

Откуда:
Сообщений: 63
iap
maldalik,

игнорировать ошибки с сообщениями, в которых есть слово "warning"?

Вообще там нет слова warning

автор
Msg 3609, Level 16, State 1, Procedure Abort, Line 90
The transaction ended in the trigger. The batch has been aborted.
14 янв 16, 12:37    [18677547]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
maldalik
Member

Откуда:
Сообщений: 63
Glory
maldalik
но веб приложение воспринимает его как ошибку.

Если написанное вами приложение не отличает, что оно получает от сервера, то это проблемы вашего приложения

maldalik
И я честно говоря не знаю что ответить веб девелоперам,
когда они указывают на возвращаемую ошибку.

Застаить их задуматься над тем, что не все, что возвращает сервер, является ошибкой.


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

Как их различать?

Msg 547, Level 16, State 0, Procedure hag_create_new_WebLogin, Line 43
The INSERT statement conflicted with the FOREIGN KEY constraint "FK__WebLogin__Subscr__65F62111". The conflict occurred in database "bill", table "dbo.Subscriber", column 'ID'.
The statement has been terminated.
Msg 42999, Level 16, State 1, Procedure EAbortInsTrig, Line 33
Не прошла регистрация login-а через WEB интерфейс
Msg 3609, Level 16, State 1, Procedure Abort, Line 90
The transaction ended in the trigger. The batch has been aborted.
14 янв 16, 12:40    [18677574]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
maldalik
Glory
пропущено...

Если написанное вами приложение не отличает, что оно получает от сервера, то это проблемы вашего приложения

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

Застаить их задуматься над тем, что не все, что возвращает сервер, является ошибкой.


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

Как их различать?

Msg 547, Level 16, State 0, Procedure hag_create_new_WebLogin, Line 43
The INSERT statement conflicted with the FOREIGN KEY constraint "FK__WebLogin__Subscr__65F62111". The conflict occurred in database "bill", table "dbo.Subscriber", column 'ID'.
The statement has been terminated.
Msg 42999, Level 16, State 1, Procedure EAbortInsTrig, Line 33
Не прошла регистрация login-а через WEB интерфейс
Msg 3609, Level 16, State 1, Procedure Abort, Line 90
The transaction ended in the trigger. The batch has been aborted.


По коду
14 янв 16, 12:41    [18677587]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
Как их различать?

Код написать.
Такой код называется - обработчик ошибок.
Пишется он в соответствии с поставновкой задачи о том, как и где должны обрабатываться ошибки.
14 янв 16, 12:43    [18677608]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
maldalik
Member

Откуда:
Сообщений: 63
Glory
maldalik
по отретьему rollback в триггере вызывает ошибку в 2008

А вы ее текст прочитали ? Тем более что это не ошибка, а предупреждение


Уверены?
https://technet.microsoft.com/ru-ru/library/ms187844(v=sql.105).aspx
автор
При выполнении триггера инициируется неявная транзакция. Если выполнение триггера завершается со значением @@TRANCOUNT, равным 0, происходит ошибка 3609, а обработка пакета инструкций отменяется. Если в триггере запускается инструкция BEGIN TRANSACTION, она создает вложенную транзакцию. В этой ситуации инструкция COMMIT TRANSACTION будет применяться только к вложенной транзакции.
14 янв 16, 12:46    [18677643]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
o-o
Guest
не вдаваясь в подробности самой темы,
скажите пожалуйста, Glory, iap и Winnipuh.
почему это error 3609 с Severety Level = 16 вдруг "warning"?
это же batch aborting error.
сам текст ошибки об этом говорит:
Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.

попробуйте выполнить пакет, где первым стейтментом нечто, откатываемое в триггере,
а вторым принт.
до принта же не дойдет.
потому что это error, причем batch aborting error
14 янв 16, 12:56    [18677720]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
потому что это error, причем batch aborting error

Если выполнение триггера завершается со значением @@TRANCOUNT, равным 0, происходит ошибка 3609,
14 янв 16, 12:58    [18677740]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
o-o
не вдаваясь в подробности самой темы,
скажите пожалуйста, Glory, iap и Winnipuh.
почему это error 3609 с Severety Level = 16 вдруг "warning"?
это же batch aborting error.
сам текст ошибки об этом говорит:
Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.

попробуйте выполнить пакет, где первым стейтментом нечто, откатываемое в триггере,
а вторым принт.
до принта же не дойдет.
потому что это error, причем batch aborting error


я тут ни при чем(ц), я вроде бы и не писал, что это warning
;-)
14 янв 16, 13:01    [18677762]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
maldalik
Member

Откуда:
Сообщений: 63
Glory
o-o
потому что это error, причем batch aborting error

Если выполнение триггера завершается со значением @@TRANCOUNT, равным 0, происходит ошибка 3609,


Я чего то не понимаю? Имхо rolback откатывает все транзакции и выставляет @@TRANCOUNT=0.
Разве нет?
14 янв 16, 13:07    [18677807]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
o-o
Guest
Glory
o-o
потому что это error, причем batch aborting error

Если выполнение триггера завершается со значением @@TRANCOUNT, равным 0, происходит ошибка 3609,

я разве об этом спрашиваю?
еще раз: с каких пор
Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.
это "warning", а не batch aborting error?
14 янв 16, 13:08    [18677816]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
Я чего то не понимаю? Имхо rolback откатывает все транзакции и выставляет @@TRANCOUNT=0.
Разве нет?

Почему же тогда в цитате написано "Если ... равным 0" ?
14 янв 16, 13:10    [18677830]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
это "warning", а не batch aborting error?

Да, это error
14 янв 16, 13:12    [18677854]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Владислав Колосов
Member

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

триггер ничего не должен откатывать, т.к. откат должен выполнять управляемо, т.е. в коде пакета. Триггер же произведет откат неконтролируемо по отношению к пакету. При автоматической транзакции сервер сам откатит изменения в случае ошибки, в случае явной/неявной транзакции сам код контролирует откат транзакции.

Если не знаете, как выполнить обработку ошибки - читайте справку по throw и try ... endtry.
14 янв 16, 13:46    [18678233]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
Владислав Колосов
триггер ничего не должен откатывать, т.к. откат должен выполнять управляемо, т.е. в коде пакета.
Допустим есть некое бизнес-правило, которое не подлежит игнорированию и проверка которого реализована в триггере.
Делегируя откат транзакции коду вне триггера, мы даем возможность это бизнес-правило проигнорировать.
14 янв 16, 14:17    [18678485]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Владислав Колосов
Member

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

ну так если код будет игнорировать ошибку, возникшую в триггере, то он сделает это преднамеренно. Так что все хорошо. На то он и код, чтобы выполнять управляемую обработку исключений. А вот откат в триггере сделает выполнение кода неуправляемым.
14 янв 16, 15:32    [18679031]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
Владислав Колосов
ну так если код будет игнорировать ошибку, возникшую в триггере, то он сделает это преднамеренно.
Вот именно, преднамеренно проигнорирует ошибку, которую нельзя было игнорировать.
А потом будете объяснять руководству, что бизнес понес потери из-за вашего желания иметь управляемый код.
14 янв 16, 15:44    [18679116]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Владислав Колосов
Member

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

это уже диверсия :) Т.е. преднамеренное вредительнство :)
14 янв 16, 16:50    [18679504]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
invm
Member

Откуда: Москва
Сообщений: 9724
Владислав Колосов
это уже диверсия :) Т.е. преднамеренное вредительнство :)
Почему сразу диверсия?

Разработчик просто может быть не в курсе, что какую-то ошибку нельзя игнорировать.
Или игнорирование было случайным, при тестировании не выявили и код ушел на продакшен.
Или игнорирование случается при редком совпадении условий и при тестировании, опять же, не выявили.
Много чего может быть, потому что код пишут люди, и очень часто не особо кфалифицированные.

А триггер с откатом в нем транзакции даст гарантии консистентности данных, пока его не запретили/удалили.
14 янв 16, 17:19    [18679704]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
maldalik
Member

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

триггер ничего не должен откатывать, т.к. откат должен выполнять управляемо, т.е. в коде пакета. Триггер же произведет откат неконтролируемо по отношению к пакету. При автоматической транзакции сервер сам откатит изменения в случае ошибки, в случае явной/неявной транзакции сам код контролирует откат транзакции.

Если не знаете, как выполнить обработку ошибки - читайте справку по throw и try ... endtry.

Проблема в том что требуется именно в триггере запретить удаление записей определенного типа.
Ну либо шерстить все процедуры в базе на предмет удаления из таблицы и добавлять именно там. Что в разы сложнее но видимо придется.
15 янв 16, 04:51    [18681563]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Glory
Member

Откуда:
Сообщений: 104751
maldalik
Проблема в том что требуется именно в триггере запретить удаление записей определенного типа.

Ваше "запретить удаление" что означает то ?
Именно откатить всю транзакцию, даже если только одна запись в ней "определенного типа" ?
15 янв 16, 09:31    [18681991]     Ответить | Цитировать Сообщить модератору
 Re: Rollback в триггере  [new]
Владислав Колосов
Member

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

т.е., согласно Вашей теории, в каждом триггере, который требует отката изменений при проверке, писать rollback и процедуры разрабатывать с тем, что этот rollback мог состояться?
15 янв 16, 13:08    [18683644]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить