1

複数のテーブルに結合する再帰的なCTEクエリとテーブルを同期させておく必要があります。 CTEは、実行されるたびに異なる結果を返すことがあります(結合したテーブルに変更が加えられた場合)。 CTEは遅く、トリガを起動させる余裕がありません。トリガを発生させたクエリは、トリガが発生するまで戻らないため(単一のレコードを単純に更新する必要はありません)トリガーが完了するのを待っているので15秒間)。 SSMSにソリューションを実装する方法についての詳細は、いいかもしれませんが、必要ではありません。同じSQL Serverデータベース内のクエリ(ビュー)とテーブルを同期させる必要がある

解決策の1つは、スケジュールされたジョブでCTEを実行し、その結果をテーブルにマージすることです。スケジュールされたジョブは数秒ごとに実行されるので、テーブルはできるだけ最新の状態に保たれます。しかし、Sql Server 2005でスケジュールされたジョブを作成する方法や、CTEクエリの結果をテーブルとマージする方法はわかりません。

がどのように私はCTEを使用して可能な限りリアルタイムに近い日付にテーブルを維持します:

は私の質問を修正再表示するには?

+0

スケジュールされたジョブは、多くとも数秒に1回、1分に1回実行できます。私はその答えがサービスブローカのキューに関係している可能性が高いと思います。テーブルが期限切れのデータを返す場合、どの程度重要ですか?テーブルがまだ同期されていない場合、ブロックされるべきである「選択」すべきか? –

+0

いいえテーブルを選択可能に保つ方がずっと良いです。それは難しい高速要求です。同期時間外では...同期が1〜2分遅れても問題ありません。 –

答えて

0

私はそれを自分で考え出しました。非常に涼しいtablediff.exeユーティリティと一緒にSQL Serverエージェントを使用して、私はtablediffユーティリティによって生成されたupsert/deleteステートメントを使用して、ビューとテーブルを同期させて保持することができました。私は2つのカラムIDを1つに連結して作成しました(これは私がそれをユニークにすると思っていました)。

これは、私がライブテーブルを切り捨てるか、ドロップしてtempテーブルの名前を変更する必要がないため、はるかに優れたソリューションでした。プラスそれはそれ自身のスレッド/環境で実行されるので、実行するのに時間がかかっても大丈夫です(常に高速でなければならないトリガーを使用するよりも)。

誰かが詳細を知りたい場合は、この記事を更新します。

+0

これを開始する方法についていくつかのコードを投稿できますか? – Omar

関連する問題