1

複数のテーブルに結合する再帰CTEクエリとテーブルを同期させる必要があります。CTEは、実行されるたびに異なる結果を返す場合があります(結合するテーブルに変更が加えられた場合)。CTEは低速であり、トリガーを起動させるクエリはトリガーが起動するまで返されないため、トリガーを実行させる余裕はありません(単一のレコードを単純に更新する必要はありません)。トリガーが終了するのを待っているため、15秒)。SSMSでソリューションを実装する方法の詳細もいいでしょうが、必須ではありません。

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

私の質問を言い換えると:

CTEを使用して、テーブルを可能な限りリアルタイムに近い状態に保つにはどうすればよいですか?

4

1 に答える 1

0

私はそれを自分で理解しました。SQL Serverエージェントと非常に優れたtablediff.exeユーティリティを使用して、tablediffutilによって生成されたupsert/deleteステートメントを使用してビューとテーブルの同期を維持することができました。ビューに一時テーブルと一意の列が必要でした(2つの列IDを1つに連結して作成しました(一意になることがわかっていました))。

ライブテーブルを切り捨てたり、削除して一時テーブルの名前を変更したりする必要がなかったため、これははるかに優れたソリューションでした。さらに、独自のスレッド/環境で実行されるため、実行に1分かかる場合でも問題ありません(常に高速である必要があるトリガーを使用する場合とは異なります)。

詳細が必要な場合はお知らせください。この記事を更新します。

于 2011-02-17T15:55:28.213 に答える