2

基本的に次のようなストアドプロシージャ内にカーソルを作成しました。

OPEN curr

    Fetch NEXT FROM curr into @ID, @IsCC, @JurisdictionID

    While @@FETCH_STATUS = 0
    Begin
        --Code for Update and Insert operations
         Fetch NEXT FROM curr into @ID, @IsCC, @JurisdictionID
    End

    CLOSE curr
    DEALLOCATE  curr

While ループで、外部キー違反の Insert ステートメントの 1 つで例外が発生しました。だから私はそれを修正しましたが、この例外の後、アプリケーションを実行しようとすると、最も単純なクエリでさえ実行できず、Timeout expired. Sql Server サービスを再起動して初めて、すべてが適切に開始されたように見えます。

私の推測では、ステートメント CLOSE と DEALLOCATE は、例外でヒットした後に実行されませんでした。このようなケースが発生した場合はどうすればよいですか?これが本番環境で発生した場合、ジャガイモのようにつぶれてしまうのではないかと心配しています。

4

1 に答える 1

0

コードがどのように見えるかはわかりませんが、通常、例外処理が正しくなく、データベースへの接続がまだ残っている場合、この種の動作が発生する可能性があります。

これらの 2 つのコマンドが実行されなかった場合は、このコードからのみ次の例外が発生するはずです。

開始時: カーソルはすでに開いています。

データベース レベルからの例外処理をより安全にする必要があると思います。

于 2012-06-04T10:42:09.673 に答える