私は10レコードをループし、これらのレコードをトランザクション内の3つの異なるテーブルに挿入する必要があります。私はトランザクションでwhileループから一度にレコードを取っています。catchブロックでエラーが発生した後も続行する方法はありますか?
私の要件は、最初の8レコードが正常に挿入され、9番目のレコードで文が失敗した場合、エラーを記録して10番目のレコードを挿入し続ける必要があります。
行にエラーがある場合、ストアドプロシージャを停止しないでください。
TRY-CATCHブロックに取引を入れようとしましたが、まだ失敗しました。
BEGIN TRY
DECLARE @TotalRecord AS INT = 10
,@LoopStartCount AS INT = 1
,@AskPkQuotationId AS INT;
--Some select stuff here
WHILE(@LoopStartCount <= @TotalRecord)
BEGIN
BEGIN TRY
BEGIN TRAN
--Do some insert update for each record.
COMMIT TRAN
END TRY
BEGIN CATCH
--Log Error and Continue with next record
END CATCH
SET @LoopStartCount = @LoopStartCount + 1;
END
END TRY
BEGIN CATCH
--Log parent error
END CATCH
なぜ、トランザクションが必要なのかというより、ループがエラーで停止するべきではありませんか? – GuidoG
@GuidoG選択したレコードにエラーが発生した場合は、そのレコードをロールバックして次のレコードに進む必要があります。 –
しかし、選択したレコードが挿入時にエラーが発生した場合、挿入されないため、ロールバックする必要はありません。または私は何かを逃していますか? – GuidoG