2009-04-27 2 views
0

TSQL BEGIN TRYおよびBEGIN CATCHブロックパターンは、クライアント接続が失われたためにエラーを検出しません。紛失したクライアント接続を捕まえて処理するにはどうすればよいですか?SQL ServerのT-SQLのtry-catchブロックで失われたクライアント接続を処理するにはどうすればよいですか?

個々のトランザクションのループを処理中の処理を示すフラグを設定していますが、catchブロックはエラー時にそのフラグを再設定しますが、クライアント接続が失われた場合、catchブロックは実行されません...

擬似コードは:

BEGIN TRY 
    SET FlagToIndicateProcessing = 1 
    LOOP START 
    BEGIN TRANS 
     DO WORK 
    COMMIT TRANS 
    LOOP END 
    SetSomeValues 
    SET FlagToIndicateProcessing = 0 
END TRY 
BEGIN CATCH 
    SetSomeValues 
    SET FlagToIndicateProcessing = 0 
END CATCH 

答えて

0

修正。

クライアントが失われた接続は、事実上、SQL Serverへのアボートとロールバックです.CATCHブロックが実行されないように、SQLの実行を停止するだけです。

なぜ個々のトランザクションをループでバッチ処理していますか?これは、誰かが解決策を提案するのに役立ちます。しばしば、1つのSQL呼び出しが1つの作業単位です。

3

データベース接続性の損失が処理できるT-SQLで/ CATCH TRYものの範囲から外れます。

あなたはいくつかの選択肢がありますが、状況によっては(設計の観点から)受け入れ可能なものによって異なります。その情報には関知していないので、提案をするのは難しいです。

これは、「親」トランザクションですべてをラップすることです。そのトランザクションがロールバックされると(接続が失われた場合は設計上行われます)、そのセッションの変更はデータベースに永続化されません。

関連する問題