3

SqlDependencyクエリを実行せずにSQLServerのC#でを実行することは可能ですか?

かなり大きくなる可能性のあるテーブルがいくつかあります。テーブル全体でクエリを実行して行が変更されたかどうかを確認するには、長い時間がかかる場合があります。

4

2 に答える 2

5

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

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

元のテーブルで変更された行が依存関係をトリガーする必要がある場合、抽出テーブルは、変更された行数のカウンターを含む単一の行のように単純である可能性があります。この値が変更されると、依存関係がトリガーされます。

または、抽出テーブルに、テーブル内の任意の行が変更された最後の日時のタイムスタンプを含めることもできます。

于 2011-12-27T21:14:04.650 に答える
0

受け入れられた答えは機能しますが、トリガーを使用できない(または使用したくない)位置にいる場合は、別の方法があります。

データをプルするたびに変化するパラメーターを持つストアード・プロシージャーを使用してください。例えば:

Alter PROCEDURE someschema.SQLDependency_DC_PRE
    @MaxDCIdx INT = 1
AS

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

そうすれば、毎回1行だけを返すことができます。これにより、クエリが主キーまたはインデックス付きフィールドにある限り、SQLの負荷を抑えることができます。

于 2013-11-07T15:18:05.537 に答える