2016-04-07 17 views
0

アプリケーションでストアドプロシージャを呼び出すと、データベースのレコードを削除するのに時間がかかります。私は、この実行中に私のアプリケーションプロセスを殺すと、レコードの削除が止まることに気付きました。クライアントプロセスが終了しても長時間実行されるSQLクエリを実行する

私はSqlCommand.ExecuteNonQuerySqlCommand.BeginExecuteNonQueryを試しましたが、どちらも同じ効果があります。

クライアントに何が起こったとしても最後まで実行されるSQLクエリを開始する方法はありますか?

更新: この場合、プロセスを非同期に実行したい、できればパラメータ化する必要があります。

+1

なぜ時間がかかるのですか?何百万というレコードを削除していますか?または巨大なテーブルのレコードを削除していますか?接続が終了した後もクエリの実行を続行する方法はありません。 – FLICKER

+0

「火と忘れ」がないのですか? –

+1

いいえ、あなたが仕事を実行しない限りはありません – FLICKER

答えて

1

プロシージャをSQL Serverジョブに追加して、プロシージャではなくSQL Serverジョブを実行できます。

USE msdb ; 
GO 

EXEC dbo.sp_start_job N'Weekly Sales Data Backup' ; 
GO 
+0

問題の詳細を知りながら質問に答えるにはどうすればいいですか?データ入力中にDELETEが発生した場合、SQLジョブは使用できません。 – FLICKER

+0

なぜあなたは問題があると思いますか?彼はちょうど接続が落ちるときに殺されない何かを始めたいと思う。 Offcourseは、他のユーザーが気まぐれにデータをインポートしているときにsqlジョブを開始できます。それで私たちはロックインの仕組みを持っているのです。 OK並行処理では問題が発生する可能性がありますが、今はそれがポイントではありません。 – Jeffrey

+0

私のコメントに理由を述べました。 OPは彼がアプリケーションを持っていて、彼のアプリではレコードを削除する手続きを呼び出し、レコードを削除した後でコードが何か他のことをしていると仮定しているので、これは非同期ではありません。彼のアプリはレコードが削除されるまで待ってから、アプリケーションコードの実行を続けなければなりません。彼は状況についてはっきりしておらず、すべての答えが正しい/間違っている/間違っている、あるいは混乱しているかもしれません。 – FLICKER

関連する問題