
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
12.09.2002, 12:53:01
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
У меня такой вопросик, есть хранимая процедура в которой запускается мнооого запросов. Как мне проверить была ли ошибка выполнения хоть одного из них, если была , то откатить транзакцию. Я делал так после каждого запроса ставил, но это очень некрасиво выходит.. select @err=@@error if len(@err)>0 begin set @msg='Error: '+ @err raiserror(@msg,16,1) rollback tran return 0 end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.09.2002, 12:55:48
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
SET XACT_ABORT ON и оно само все сделается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.09.2002, 12:57:02
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
пример из BOL Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.09.2002, 12:57:22
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.09.2002, 12:58:58
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
if len(@err)>0 - ошибка: len только для строк. Удобнее всего использовать некрасивый оператор goto: /*после каждого оператора*/ if @@error<> 0 goto Err ... return 0 Err: rollback tran return -1 А raiserror будет вызываться сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.09.2002, 13:00:34
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
можно упростить примерно так : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Но я делал подругому ... каждый запрос оформлял в процедуре ... и получалось так : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Ничего не тестировал ... написано для примера ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.09.2002, 13:04:06
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
Для Lexis, но на сколько я знаю, этот обаботчик работает только для последнего запроса... Те. если следущий запрос без ошибок, то @@error=0... А ставить такой обработчик для N-ого колличества запросов (их ооочень много) ломает... Хотя может я что то не понимаю.. SET XACT_ABORT ON подходит, но в этом случае выводится системная ошибка, юзеры нифига не поймут -)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.09.2002, 13:11:43
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
Спасибо всем! Я понял одно, что после каждого запроса (или вызова процедуры) мне придется делать проверку..-((( Для alexeyvg, я считываю @@error в переменную varchar (для формирования в дальнейшем строки сообщения) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.09.2002, 13:30:43
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
близкий к теме вопрос: если внутри транзакции произошла "ашипка" синтаксиса (типа в селекте указано поле которого нет в таблице), то хп тут-же прекращает свою работу и до проверки на ошибку и откат транзакции просто не доходит и эта транзакция просто "зависает". Причем, единственный способ - это перехватить ошибку в приложении и оборвать конекшн. Как с этим бороться более цивилизованно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.09.2002, 14:05:26
|
|||
|---|---|---|---|
Как лучше обробатывать ошибки в TSQL? |
|||
|
#18+
А в catch (except, finally) засунуть ROLLBACK? Если взять себе за золотое правило объявлять транзакции внутри sp и там же их закрывать, то на такие грабли и на многие другие просто никогда не наступить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1820399]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 420ms |

| 0 / 0 |
