2012-05-07 2 views
0

Я делаю это в SQL Server 2005. У меня есть таблица, есть только один столбец типа int, o вы не можете вставлять в него символ.Простая транзакция не работает на SQL Server 2005

DECLARE @intErrorCode INT 

BEGIN TRAN 
Update TestTable set A='a' where A=3 --UPDATE TO CHAR, FAIL 

SELECT @intErrorCode = @@ERROR 
IF (@intErrorCode <> 0) GOTO PROBLEM 

COMMIT TRAN 

PROBLEM: 
IF (@intErrorCode <> 0) BEGIN 
PRINT 'Unexpected error occurred!' 
ROLLBACK TRAN 
END 

Ожидается, что произойдёт непредвиденная ошибка! в результате. Но я действительно вижу: Не удалось преобразовать при преобразовании значения varaar 'a' в тип данных int.

Похоже, что мой SQL Server не воспринимает мой код как транзакцию вообще ... Он попал в строку сбоя и сразу после этого прекратил работу.

Что я здесь делаю неправильно?

ответ

2

Первое использование Попробуйте поймать блоки вместо этого.

Однако, ошибка ошибок sql не будет работать для всех типов ошибок.

Ознакомьтесь с информацией об обработке ошибок с помощью блока try catch в онлайн-книгах, и вы увидите, как типы ошибок не попадают в ловушку.

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

Смежные вопросы