1

私は次の手順を持っています。(構文は完璧ではありません。アイデアを提供したいだけです)。

begin tran

begin try

while loop
  some condition, if true
   raiseerror('error', 16, 1)

end try
begin catch
  if transaction > 0
    rollback tran
  select error message
end catch

if transaction > 0
  commit tran

質問:

  1. レイズエラーはキャッチブロックを強制しますか? その場合、トランザクションは完全に (ループのすべての反復に対して) ロールバックされますか?

  2. #1をケースにしたいのですが、ロールバックトランの後に「RETURN」を追加する必要がありますか?

繰り返しで何らかのエラーが発生した後でもループが継続しているように見えるため、この質問をしています。

4

1 に答える 1

1

この質問を見てください (本当にあなたから尋ねられました): SQL Server XACT_ABORT with exclude

質問は少し異なりますが、やろうとしていることを達成する方法の基本的な構造を示しています。

30 秒の要約は次のようになります: 行ったように try/catch ブロックを使用し、手順の最後に「失敗」と呼ばれるセクションを用意して、すべてのキャッチが向けられるようにします。ロギングの各キャッチにメッセージを設定するか、エラーをエンド ユーザーに渡すことができます。

于 2017-07-27T20:48:06.860 に答える