2012-01-09 16 views
0

SQL Server 2008 Expressを使用しており、予算内にない完全版を購入できません。挿入後に構成可能な時間後にストアドプロシージャを呼び出す

私が必要とするのは、ストアドプロシージャを呼び出して一定時間後に通知メールを送信するための挿入が完了した後です。この時間は、設定可能な理由でデータベースにも格納されます。

Windowsスケジューラを使用し、ストアドプロシージャを1日2回実行することを考えていましたが、ユーザーが12時間未満実行するように設定すると、2回以上通知されるユーザーにつながります。私は確かに毎時間それを実行することは賢明ではないと思う。したがって、これらのオプションはどちらもベストのようには見えません。私が思っていた

も、このまたは(明示覚えを使用して)特定の時間に実行するようにスケジュールするような時間の何かへの道があったある

すべてのヘルプは大歓迎と読書のための感謝されるだろう!

+3

1時間ごとに実行するのはなぜ賢明ではないでしょうか?私は送信する最新の通知を確認するために1時間ごとに実行されるアプリの通知部分をたくさん書いてきました。 – Eric

+0

私は一気にすべてのことをやり遂げることができるようになったときに、リソースを取り上げて1時間ごとに仕事をしなければならないのはちょっと悪い考えでした。しかし、私はそれが実際には一方では半ダースで6であると思います。 – user758105

+0

スケジューラを頻繁に実行すると、ユーザは複数の通知を受け取るのはなぜですか?反復を避けるために、電子メールを送信した後でDB内のレコードにフラグを立てたり削除したりする必要があります。 – RickNZ

答えて

1

使用conversation timers。インサートでは、会話タイマーを起動して、希望の時間数後に発射します。時間が経過すると、システムはメッセージをエンキューし、interval activationを使用してメッセージの送信を含め、必要な手順を実行できます。この実装の利点は、SQL Expressの機能のみに依存することです。また、CLRやWAITFORベースのソリューションで起こるような、プロセスがシャットダウンした場合に通知を失うこともありません。

Asynchronous procedure executionを参照してください。同様の考え方ですが、タイマーは必要ありません。

保留中の「期限切れ」通知に対して毎回(または5分ごとに)チェックを行っても、「チェック」タスクをアクティブにするためにService Brokerのアクティブ化ベースのメカニズムを使用します。また、Using tables as Queuesと読むことをお勧めします。

+0

非常に徹底的な答えとまさに私が感謝のために探していたもの! – user758105

0

これを実現するには、ビジュアルスタジオでCLRプロジェクトを使用することができます。

トリガーはテーブルに対して行われた挿入をリッスンし、その戻り値として電子メールを送信するWebサービスを呼び出します。

+0

電子メールは難しい部分ではありません。一定の時間遅れが必要です。これは古典的なASPを持つ古いプロジェクトで、私はすでにデータベースに電子メールを送ることができます。私はちょうど時間の設定量のためにそれらを遅らせる方法を必要とします。あなたの答えをありがとう。 – user758105

0

SQL ServerのWAITFORコマンドを使用できる場合は、参考になる場合があります。

毎時実行されるSQLストアドプロシージャで、「この時間」に実行するように設定されているかどうかを確認します。

http://msdn.microsoft.com/en-us/library/ms187331.aspx

関連する問題