トランザクションのエラーを特定するための最も洗練された方法は何ですか?現時点では、私のコードは次のようになっています。
begin transaction tx1
update ....
insert ....
if @@error = 0
commit
else
rollback
end
これは、最後の操作エラー、この場合は挿入時のエラーのみをキャッチしますが、最初の操作エラー、私の場合は更新エラーはキャッチしません。コードを改善するにはどうすればよいですか?
トランザクションのエラーを特定するための最も洗練された方法は何ですか?現時点では、私のコードは次のようになっています。
begin transaction tx1
update ....
insert ....
if @@error = 0
commit
else
rollback
end
これは、最後の操作エラー、この場合は挿入時のエラーのみをキャッチしますが、最初の操作エラー、私の場合は更新エラーはキャッチしません。コードを改善するにはどうすればよいですか?
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の聖書も参照してください。