あなたに通知している通知の種類によって、ユーザーに最もよく通知する方法が決まるのは、多くの点で異なります。しかし、私は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
と組み合わせて使用することで、「インスタント」電子メール通知とは、共通の監査データベースに送信するなど、キューテーブル内のそのデータでより汎用的な処理を行うことができます。多くの人々があなたのアプリを介して見ることができる変化しているものに、より「グローバルな」外観を持たせるために加えることができます。
ユーザーはどこですか(Windowsアプリケーション、ウェブブラウザ、電話アプリ、Excelなど) – adrianm