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

Откуда: Королевство
Сообщений: 902
Подскажите пожалуйста как правильно перехватить ошибку конвертирования?

Как только возникает ошибка при конвертировании даты я не могу завершить транзакцию.

Ошибка -
The current transaction cannot be committed and cannot support operations that write to the log file. Roll back the transaction.



DECLARE @Date datetime

BEGIN TRY

BEGIN TRAN Tran_A

SELECT 1, 2, 3, 4

BEGIN TRY
SELECT @Date = CAST ('####' as datetime)
END TRY
BEGIN CATCH
SELECT @Date = null

SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
END CATCH

COMMIT TRAN Tran_A

END TRY

BEGIN CATCH

SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;

ROLLBACK TRAN Tran_A

END CATCH
10 июл 09, 19:05    [7403658]     Ответить | Цитировать Сообщить модератору
 Re: Почему не могу завершить транзакцию?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
rollback тоже завершает транзакцию.
10 июл 09, 19:43    [7403778]     Ответить | Цитировать Сообщить модератору
 Re: Почему не могу завершить транзакцию?  [new]
i2akai1
Member

Откуда: Петербург
Сообщений: 217
Nikulin,

тут нигде не изменяется БД (нет insert или update) поэтому сервер и говорит
а зачем тут транзакция вообще?
10 июл 09, 19:49    [7403802]     Ответить | Цитировать Сообщить модератору
 Re: Почему не могу завершить транзакцию?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
i2akai1
Nikulin,

тут нигде не изменяется БД (нет insert или update) поэтому сервер и говорит
а зачем тут транзакция вообще?
Ответ абсолютно неверный. Правильный ответ: не после каждой ошибки можно спокойно работать дальше, некоторые ошибки потребуют отката транзакции перед продолжением ввода/вывода. Кстати, насколько сильно вас срубило можно узнать через функцию xact_state().
10 июл 09, 20:19    [7403886]     Ответить | Цитировать Сообщить модератору
 Re: Почему не могу завершить транзакцию?  [new]
i2akai1
Member

Откуда: Петербург
Сообщений: 217
Гавриленко Сергей Алексеевич,

:) буду знать
10 июл 09, 21:30    [7404029]     Ответить | Цитировать Сообщить модератору
 Re: Почему не могу завершить транзакцию?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
ответ - не пользоваться TRY / CATCH. слишком специфичное средство. похоже, нельзя активно применять в разработке "внутренней логики" базы. только для "наружных" запросов
13 июл 09, 11:23    [7407344]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить