1

我需要使表与连接到多个表的递归 CTE 查询保持同步。CTE 每次运行时都可能返回不同的结果(如果对其加入的表进行了任何更改)。CTE 很慢,我不能让触发器运行它,因为导致触发器触发的查询在触发器触发后才会返回(我不希望对单个记录进行简单更新15 秒,因为它正在等待触发器完成)。有关如何在 SSMS 中实施解决方案的任何细节也很好,但不是必需的。

一种解决方案是让计划的作业运行 CTE,并将其结果与表合并。计划的作业可以每隔几秒钟运行一次,因此表尽可能是最新的。但我不知道如何在 Sql Server 2005 中创建计划作业或如何将 CTE 查询的结果与表合并。

重申我的问题:

如何使用 CTE 使表格尽可能接近实时地保持最新状态?

4

1 回答 1

0

我自己想通了。使用 Sql Server 代理以及非常酷的tablediff.exe实用程序,我能够使用 tablediff 实用程序生成的 upsert/delete 语句使视图和表保持同步。它需要一个临时表和视图中的一个唯一列(我通过将 2 个列 ID 连接成一个列来创建它(我知道这会使它成为唯一的))。

这是一个更好的解决方案,因为我不必截断活动表或删除它并重命名临时表。另外,它在自己的线程/环境中运行,所以如果需要一分钟运行就可以了(与使用总是需要快速的触发器相比)。

如果有人想要更多详细信息,请告诉我,我会更新这篇文章。

于 2011-02-17T15:55:28.213 回答