以下のストアプロシージャコードの改善をお勧めする人はいませんか?SPエラーキャッチ
過去には、私のトランザクションをC#で処理してそこからロールバックするのが最良だったが、今はトランザクションを持ってSP自身にブロックをキャッチする必要がある。
私はSPのトランザクションの例をたくさん見つけましたが、キャッチブロックを試してみましたが、その多くは組み合わせていません。
私が知りたいのですが、以下のコードになるされています
キャッチすべてのエラーの
すべてのSPクラッシュの危険性やタイミングを削除して、開いて、圧延ないトランザクションを残します戻る
エラーが発生しても、SPコミットのすべてのリスクを除去します。返信Manjunatha Gouliため
SET NOCOUNT ON; SET XACT_ABORT ON; --used so transaction is not left open in the even of an error or timeout DECLARE @Error int BEGIN TRANSACTION BEGIN TRY INSERT INTO Locations_Internal (Loc_Ref, Loc_Code, Loc_Desc, Company_For_Desc, Row_Updated_PDA_Sync) VALUES (@Loc_Ref, @Loc_Code, @Loc_Desc, @Company_For_Desc, 'invalid value'); SELECT @Error [email protected]@ERROR; IF @@ERROR <> 0 GOTO ERR_HANDLER; --OTHER INSERT/DELETE/UPDATE Statements END TRY BEGIN CATCH SET @Error = @@ERROR; GOTO ERR_HANDLER; END CATCH COMMIT TRANSACTION RETURN 0; ERR_HANDLER: SELECT 'Unexpected error occurred!' ROLLBACK TRANSACTION RETURN @Error
おかげで、
うinsert文は失敗しますが、クラッシュしてそれだけでの残りの部分とに運ぶ例外をスローしない場合にはその仕事手順?これも可能ですか?
だけトランザクションを使用するか、またはすべてのエラーがキャッチでキャッチされるのではなくときに私は/ SELECT文をDELETE /すべてのINSERT/UPDATE後にチェック@@エラーを見てきた例のほとんどは、このアプローチはまだ必要とされるので、私は尋ねますコードを続行する。
try catchブロックを使用している場合、SPで@@ ERRORをチェックする必要がありますか? tryを実装していない旧バージョンのMS SQL向けに設計されたこの記事を参照している記事はありますか?