TRY
内にいるときにのみトランザクションを開きます ブロックして実際のステートメントの直前に置き、すぐにコミットします。コントロールがバッチの最後に移動してトランザクションをコミットするのを待たないでください。
TRY
で問題が発生した場合 ブロックしてトランザクションを開くと、コントロールはCATCH
にジャンプします ブロック。そこでトランザクションをロールバックし、必要に応じて他のエラー処理を実行します。
@@TRANCOUNT
を使用して開いているトランザクションのチェックを少し追加しました 実際にトランザクションをロールバックする前に機能します。このシナリオでは、あまり意味がありません。 TRY
で検証チェックを行う場合に便利です。 パラメータ値やその他のものをチェックし、TRY
でエラーを発生させるなど、トランザクションを開く前にブロックします 検証チェックのいずれかが失敗した場合はブロックします。その場合、コントロールはCATCH
にジャンプします トランザクションを開かずにブロックします。そこで、開いているトランザクションを確認し、開いているトランザクションがある場合はロールバックできます。あなたの場合、CATCH
を入力しないので、開いているトランザクションをチェックする必要はありません。 トランザクション内で問題が発生しない限り、ブロックします。
DELETE
を実行した後に質問しないでください コミットまたはロールバックする必要があるかどうかの操作。トランザクションを開く前に、これらすべての検証を行ってください。トランザクションが開かれたら、すぐにコミットし、エラーが発生した場合は、エラー処理を実行します(ほとんどすべてのエラー関数を使用して詳細情報を取得することで、適切な作業を行っています)。
BEGIN TRY
BEGIN TRANSACTION SCHEDULEDELETE
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
COMMIT TRANSACTION SCHEDULEDELETE
PRINT 'X rows deleted. Operation Successful Tara.' --calculation cut out.
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION SCHEDULEDELETE
PRINT 'Error detected, all changes reversed'
END
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
END CATCH