0

トランザクションのエラーを特定するための最も洗練された方法は何ですか?現時点では、私のコードは次のようになっています。

begin transaction tx1
update ....
insert ....
if @@error = 0
   commit
else
   rollback
end

これは、最後の操作エラー、この場合は挿入時のエラーのみをキャッチしますが、最初の操作エラー、私の場合は更新エラーはキャッチしません。コードを改善するにはどうすればよいですか?

4

1 に答える 1

4

TRY/を見たことがありますCATCHか?

http://msdn.microsoft.com/en-us/library/ms175976.aspx

もちろん、次のCATCHようなことをした場合にのみ、最初のエラーをキャッチすることができます。

BEGIN TRANSACTION; -- not sure why you're using a named transaction

BEGIN TRY
  UPDATE ...
  INSERT ...
  COMMIT TRANSACTION;
END TRY
BEGIN CATCH
  PRINT ERROR_MESSAGE();
  ROLLBACK TRANSACTION;
END CATCH

ただし、各操作を独自のTRY/CATCHでラップすることはできます。

BEGIN TRANSACTION; -- still not sure why you're using a named transaction

BEGIN TRY
  UPDATE ...
  COMMIT TRANSACTION;
END TRY
BEGIN CATCH
  PRINT ERROR_MESSAGE();
  ROLLBACK TRANSACTION;
END CATCH

BEGIN TRANSACTION;

BEGIN TRY
  INSERT ...
  COMMIT TRANSACTION;
END TRY
BEGIN CATCH
  PRINT ERROR_MESSAGE();
  ROLLBACK TRANSACTION;
END CATCH

しかし、ここでどのルールに従うかわかりません...更新が失敗した場合に挿入を成功させますか?すべてのアクションをグループとして成功または失敗させたい場合は、すべてを1つで試行する最初のアプローチが必要ですTRY

また、エラー処理に関するErlandSommarskogの聖書も参照してください。

http://www.sommarskog.se/error_handling_2005.html

于 2012-04-17T17:54:48.890 に答える