Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Я думал что при set xact_abort on после возникновения ошибки должно прекращатся выполнение кода. Но этот пример демонстрирует обратное. Может кто-нибудь пояснить на какие случаи расчитан set xact_abort on create procedure test as set xact_abort on select '1' RaisError('Oшибка',16,1) select '2' go exec test ****** Результат выполнения ********************************** ---- 1 (1 row(s) affected) Server: Msg 50000, Level 18, State 1, Procedure test, Line 6 Oшибка ---- 2 (1 row(s) affected) ************************************************************* ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2001, 15:05 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Читаем BOL "SET XACT_ABORT Specifies whether Microsoft® SQL Server™ automatically rolls back the current transaction if a Transact-SQL statement raises a run-time error." Ни о каком прекращении выполнения кода речи не идет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2001, 15:24 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
А по-моему от того что написано "Ошибка", оно не становиться серверной ошибкой RaisError вызывает просто сообщение об ошибке, но не саму ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2001, 15:40 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Скорее соглашусь с Glory чем с SergSuper. В качестве обоснования: RaisError('Ошибка',16,1) select @@Error ***Результат выполнения********************* Server: Msg 50000, Level 16, State 1, Line 1 Ошибка ----------- 50000 (1 row(s) affected) ******************************************** ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2001, 05:40 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Как бы то там ни было, но действие RAISERROR отличается от настоящих рантайм-ошибок (типа нарушение вторичного ключа или уникальности). Настоящие-таки ошибки прерывают исполнение кода и откатывают транзакцию при SET XACT_ABORT ON. О том, что RAISERROR не работает под SET XACT_ABORT ON, как ожидается, давно известно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2001, 06:52 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Если заменить RaisError('Ошибка', 16, 1) на drop table [Несуществующая таблица] , то результат будет тем же самым. Так что RaisError тут не при чем. Я сейчас не могу утверждать точно, но помоему после каких-то ошибок происходит прерывание исполнения кода. Или все таки прав Glory? Причем Severity здесь как бы не при чем. Если нельзя четко прогнозировать поведение исполняемого кода, то выходит что лучше пользоваться громоздким способом set xact_abort off c последующей обработкой переменной @@Error после каждого критичного участка кода. Или я все таки не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2001, 14:06 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Отличай рантайм-ошибки от ошибок компиляции. drop table [Несуществующая таблица] - ошибка компиляции, а не времени исполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2001, 14:10 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Глеб, позвольте не согласится. Это именно Runtime ошибка. Пример ниже это демонстрирует: create procedure Test as set xact_abort on select '1' drop table [Несуществующая таблица] select '2' go exec Test *****Результат выполнения*********************************** ---- 1 (1 row(s) affected) Server: Msg 3701, Level 11, State 5, Procedure Test, Line 5 Cannot drop the table 'Несуществующая таблица', because it does not exist in the system catalog. ---- 2 (1 row(s) affected) *********************************************************** ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2001, 05:42 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Да, ты прав настчет рантаймости этой ошибки. Однако посмотри ее уровень (Level) серьезности. Уровень серьезности, с которой ошибка считается ошибкой, это с 17. BOL: Severity levels from 17 through 25 indicate software or hardware errors. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2001, 07:17 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
2 Глеб Уфимцев severеty практически не влияет на поведение этой опции, во всяком случае я генерил ошибку с различными severety и отката транзакции не происходило. 2 BiSas Не так давно я исследовал поведение сервера при включении этой опции, насколько я понял, прекращение исполнения кода и откат транзакции происходит только при возникновении runtime ошибок в выражениях update и insert. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2001, 07:34 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Большое спасибо всем за полезную дискуссию!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2001, 07:58 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Я разве утверждал обратное насчет raiserror? То, что я говорил насчет severity, к raiserror отношения не имеет. Имелись в виду "родные" ошибки в том контексте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2001, 08:04 |
|
||
|
Не понимаю set xact_abort
|
|||
|---|---|---|---|
|
#18+
Меня, кстати, тоже раздражает такое поведение raiserror, да и вообще отсутствие обработки ошибок и исключений в mssql. Не понимаю, почему ms до сих пор об этом не озадачилась в продукте, который они продают весьма недешево. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2001, 08:09 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32017002&tid=1825001]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 357ms |

| 0 / 0 |
