1

ストアドプロシージャの実行に10分かかり、データが返されないと仮定します。

SQL Serverでストアドプロシージャを呼び出し、コードが結果を待たないようにする適切な方法は何ですか?T-SQLまたは接続からそれを処理する方法はありますか?ADO.NETおよび従来のActiveXADOで機能するものはありますか?

私が考えた唯一の方法は次のとおりです
。1)T-SQLでジョブを作成する
2)T-SQLベースのコードをジョブのステップ1にロードする
3)コードの最後の行でジョブが削除されることを確認する
4)ジョブを実行する(これで応答が途絶えることはないと確信しています)これは非常に悪く、ハックだと思います...しかし

ストアドプロシージャをラップして「応答がないことはわかっているので、待たないことを選択している」と言うことができるとは思わないT-SQLは他にありますか?

4

4 に答える 4

8

はい、できます

  1. SqlCommand.BeginExecuteNonQuery() を使用して、非同期で呼び出します
  2. または、デリゲートで非同期に呼び出します (スレッド プールのスレッドを使用します)。
  3. または別のスレッド(自分で作成)
  4. 従来の ADO では、Connection の Open メソッドで Option パラメータを使用します。

    oConnection.Open( , , , adAsyncConnect)

于 2009-01-19T17:11:05.887 に答える
2

.Net の場合は、オブジェクトの.BeginExecuteNonQuery()メソッドを試してください。SqlCommandただし、それが ActiveX ADO からどのように機能するかはわかりません。

于 2009-01-19T17:06:59.437 に答える
1

変更を加えたり、非常に多数のレコードを挿入したりしない限り、それほど時間がかかった SP の書き換えを調査します。ユーザー インターフェイスから 30 秒以上かかる場合は、パフォーマンスに問題がある可能性が非常に高いと言えます。問題の proc にはカーソルがありますか? もしそうなら、おそらく適切なパフォーマンスチューニングでミリ秒まで下げることができます。プロセスを終了せずにユーザー インターフェイスを継続させるための回避策を実行する前に、常にパフォーマンス チューニングを検討します。

レコードを返さないと言いますが、失敗した場合、ユーザーは何を知る必要がありますか? 彼らが他の何かに進んだ場合、彼らはそれが正常に完了したと考えるでしょう.

于 2009-01-19T17:12:22.297 に答える
0

別のスレッドで実行し、スレッドを終了させます。

于 2009-01-19T17:06:57.660 に答える