2

throwエラーが原因でステートメントが失敗した場合、ストアド プロシージャを自動的に作成する方法はありますか?

merge主キー違反が原因で失敗する可能性があるステートメントを含むストアド プロシージャ内にいますが、実行は続行されます。

私はif @@error != 0 throw ...どこにでも頼らなければなりませんか?

編集: MS SQL Server 2012 を使用しています

編集:これはうまくいくようですが、より冗長な解決策はありますか? の導入により、エラーが発生したときにフローがブロックにtry/catchジャンプするように見えます。catchそこから、例外を再スローします。

begin try    
    ....do lots of sql code
end try
begin catch
    throw;
end catch
4

2 に答える 2

3

SET xact_abort ONステートメントの先頭で使用します。特定のステートメントが失敗すると、自動ロールバックが発生します。

ストアド プロシージャで "SET XACT_ABORT ON" を使用する利点は何ですか? を参照してください。.

編集:上記はSQL-Server用です。

于 2013-08-02T21:17:08.610 に答える
1

トランザクションにラップして、何かが失敗した場合に変更をロールバックし、エラーメッセージを返すようにするのはどうですか。

何かのようなもの

BEGIN Transaction
--Do some code

if @@error > 0 
BEGIN
--Do your throw here and then
ROLLBACK TRANSACTION
END
ELSE

BEGIN
COMMIT TRANSACTION
END
于 2013-08-02T21:16:32.780 に答える