2016-09-08 3 views
0

一部のデータが一部のテーブルで変更された場合、ユーザーに通知する必要があります。データの変更に関するSQL Advance Notification?

これを行うには、別のテーブル(tb_notification)にデータを挿入するトリガーを定義し、そのテーブルをチェックしてユーザーにメッセージを表示するタイマー(.NETアプリ内)があることがわかります。

これは1つの解決策です。

のでSQLCLRまたはSQL SMO、あるいは何か他のものとの別の解決策はありますか?

私はあまり程度SQLCLRまたはSQL SMOを知らないと、この問題に対処する最善の方法を選択するための解決策を探しています。

+0

ユーザーはどこですか(Windowsアプリケーション、ウェブブラウザ、電話アプリ、Excelなど) – adrianm

答えて

1

あなたに通知している通知の種類によって、ユーザーに最もよく通知する方法が決まるのは、多くの点で異なります。しかし、私はSMOは、本当にメタデータとの一般的なやりとりをはるかに簡単にするためのもので、通知に関しては何もしないと思います。

ユーザーに電子メールを送信する場合は、T-SQLトリガーを使用してsp_send_dbmailに電話する必要があります。このシステムストアドプロシージャは、Service Brokerを介して非同期に実行されるため、DMLステートメントを保持することはできません。

Webサービスを呼び出す必要がある場合、は、SQLCLRトリガーまたはSQLCLR関数/ストアドプロシージャを呼び出すT-SQLトリガーを使用してこれを実行します。ここでの欠点は、Webサービス呼び出しが応答を待っている間にDML文をハングアップさせる可能性がはるかに高いことです。また、(最大接続の設定に応じて)リクエストを行う機会を待つことさえあります。

また、キューテーブルにT-SQLトリガに必要な情報を格納し、SQL Serverエージェントジョブを毎分実行してそのキューテーブルのレコードを処理することもできます。レコードが「処理された」レコードを削除するようにしてください。このオプションは自然に非同期です。したがって、SQLCLRを介してWebサービスを呼び出すことははるかに危険です。または、このアプローチをsp_send_dbmailと組み合わせて使用​​することで、「インスタント」電子メール通知は、共通の監査データベースに送信するなど、キューテーブル内のそのデータでより汎用的な処理を行うことができます。多くの人々があなたのアプリを介して見ることができる変化しているものに、より「グローバルな」外観を持たせるために加えることができます。

関連する問題