SqlDependencyのSQL文にご注意

SQL Server 2005以降、テーブルが更新されると、それをイベントとしてアプリケーションが
受け取れる仕組みを作成するSqlDependencyクラスがあります。
これを使うと、サーバープログラムとクライアントアプリケーション間で、実装が面倒な
ソケット通信などの処理を作成すること無く、クライアントアプリケーションに通知する
仕組みが作成できます。
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqldependency.aspx

具体的な実装方法は、以下のサイトを参照ください。
http://dotnet.dzone.com/articles/c-sqldependency-monitoring
http://www.dreamincode.net/forums/topic/156991-using-sqldependency-to-monitor-sql-database-changes/

大まかな流れは以下の通りです。
A SQL ServerでQUEUE等を作成
B アプリケケーションでテーブルの変化を通知してほしい、SQLECT SQL文を作り、そのSQL文の結果が
変化したとき実行されるメソッドを登録するイベントを設定
C 実行されるメソッドを定義

このBでのSQL文に制約があり、SqlDependencyクラスの制約にあっていないと、大量のイベントが
発生し、Cのメソッドの処理でCPUがフル状態となってしまいます。
以下のSQLは経験上ダメなのでご注意ください。他にもダメな場合があるかもしれません。
・外部結合(Outer Join)のSQL
・3つ以上を結合するSQL
もし、どうしてもこのような条件のSQLを使いたい場合、SqlDependencyクラスを使うため専用の
テーブルを作成するのもひとつの回避方法です。