2012-05-07 21 views
0

SQL Server 2005でこれを実行しています。テーブルがあり、int型の列が1つしかありません。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 

「予期しないエラーが発生しました!」と表示されます。結果として。 しかし、私が実際に見ているものは次のとおりです。 varchar値 'a'をデータ型intに変換するときに変換に失敗しました。

私のSQL Serverはトランザクションとして自分のコードを取っていないようです...それは失敗行を打ち、その直後に実行を終了します。

私はここで間違っていますか?

答えて

2

最初の使用代わりにキャッチブロックを試してください。

ただし、すべてのタイプのエラーに対してSQLエラートラッピングは機能しません。

オンラインでBooksのtry catchブロックを使用してエラー処理について調べると、トラップされていないエラーの種類についての説明が表示されます。

一般的なメッセージよりも実際のエラーを返す方が良いでしょう。実際のエラーを知っている場合、エラーの問題を追跡する方がはるかに簡単です。

関連する問題