6
をキャンセルした後、まだ開いている、私はこのようなパターンを使用しています:私は、SQL Server Management Studioの上のボタン「クエリを実行キャンセル」打ったときトランザクションは、SQL Server 2008でクエリ
begin transaction
begin try
/* do something */
end try
begin catch
if @@TRANCOUNT > 0
rollback
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity,1)
end catch
if @@TRANCOUNT > 0
commit transaction
それは、クエリや葉をキャンセルトランザクションは開かれます。
これは意図した動作ですか?それとも私のパターンに間違いがありますか?トランザクションをロールバックすべきではありませんか?
を参照してください。更新された答え –
この回答は、質問の精神を回避するようだ...質問は、 "クエリをキャンセルするとtry/catch構造の"キャッチ "ブロックがトリガーされないのはなぜですか?これが意図された動作であれば、なぜですか?そのprocのデザイナーとして、私はprocが正常に完了するかロールバックすることを期待しています - try/catchの暗黙のセマンティクスは "実行を停止しますが、キャッチブロックを心配する必要はなく、トランザクションをSQLサーバー断線時には、そのときの処理をクリーンアップすることにします... "正気な行為は、"キャンセルエラー "を引き起こすことでしょう、確かに? – Tao
@タオあなたは正しいかもしれませんが、作者は答えを受け入れました。お願いします。 –