1

Sql Server 2008 にストアド プロシージャまたはトリガーがある場合、「別のノンブロッキング スレッド」で SQL 計算を実行できますか? すなわち。背景に何か

また、2 つの SQL コード ブロックを並行して実行できますか? または2つのストアドプロシージャを並行して実行しますか?

例えば。ユーザーが何らかの「アクション」を実行した後、各スタック オーバーフロー ユーザーのスコアを計算するジョブが与えられたと想像してください (そして、すべての「do that elsehwere/service/batch/overnight/etc, elswhere」をそのままにしておいてください)。

Post テーブルにトリガーがあるため、新しい投稿が INSERTED になると、トリガーが起動し、そのロジックの一部として、ユーザーの最新のスコアが計算されます。ストアド プロシージャが終了して現在の SQL スレッド/実行プログラムをブロックするのを待つ代わりに、バックグラウンドまたは並列でスコアを計算するように要求できます。

乾杯!

4

2 に答える 2

2

SQL Server には、並列実行または遅延実行はありません。接続内の実行中のコードの各ブロックは、1 行ずつ順次実行されます。

処理を切り離すには、通常、SQL Server エージェント ジョブを使用するか、サービス ブローカーを使用する必要があります。これらは、新しい接続、新しいセッションなどで実行を開始します

意味あり:

  • 変更をロールバックしたい場合はどうしますか? バックグラウンド スレッドは何をし、どのように認識しますか?
  • どのようなデータを使用していますか? 新しい、古い、ロック待機、スナップショット?
  • メイン スレッドより先に進み、古いデータを使用するとどうなりますか?
于 2009-10-30T05:23:50.427 に答える
1

いいえ、ただし、リクエストをキューに書き込むことはできます。SQL Server コンポーネントである Service Broker は、この種のサポートを提供します。これはおそらく、非同期処理に利用できる最良のオプションです。

于 2009-10-30T05:44:43.483 に答える