2011-12-27 24 views
3

クエリを実行せずにSql ServerのC#でSqlDependencyを実行することはできますか?クエリを実行しないSqlDependency

かなり大きくなる可能性のあるテーブルがあります。行が変更されたかどうかを調べるためにテーブル全体でクエリを実行すると、時間がかかることがあります。

+0

この質問に答えるのに役立つサイトがあります。http://msdn.microsoft.com/en-us/library/62xk7953(VS.80).aspxこのサイトでは、必要なときにイベントを購読する方法をユーザーに示しますsqlDependencyを確認する – MethodMan

+0

私は動作しているSqlDependencyを設定しています。私は "command.ExecuteResult()"コマンドを実行せずにそれを行う方法があるかどうか疑問に思っていました。私は "command.ExecuteNonQuery()"でうまく動作するように設定しましたが、テーブルに数百万行が再実行されると速度が遅くなります。 – Stuart

答えて

5

いいえ、SqlDependencyにはSqlCommandを実行する必要があります。

パフォーマンスが問題になる場合は、監視対象のテーブルにトリガを追加し、行が変更されるたびに抽出テーブルに書き込んだり、SqlDependencyが抽出テーブルを監視したりするなど、代替設計について考えることができます。

元のテーブルで変更された行が依存関係を引き起こす場合、抽出テーブルは、変更された行数のカウンタを含む単一の行と同じくらい簡単です。この値が変更されると、依存関係がトリガーされます。

また、抽出テーブルには、テーブル内の行が変更された最後の日付/時刻のタイムスタンプが含まれていてもかまいません。

+0

よかった。これはまさに私が必要としていたものです。ありがとう。 – Stuart

0

回答は受け入れられますが、トリガーを使用できない(または使用したくない)立場にいる場合は、代替案があります。

データをプルするたびに変更されるパラメータを持つストアドプロシージャを使用します。たとえば:

Alter PROCEDURE someschema.SQLDependency_DC_PRE 
    @MaxDCIdx INT = 1 
AS 

SELECT DCIdx FROM someschema.DC_PRE WHERE DCIdx >= @MaxDCIdx ORDER BY DCIdx DESC; 

はその後、クエリが主キーまたはインデックス付きフィールド上にある限り、ダウンロードSQLを保つべき、一つだけの行ごとに返すことを確認することができます。

関連する問題