2011-02-09 46 views
1

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

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

要重申我的问题:

如何保持桌面最新尽可能接近实时地使用CTE?

+0

计划作业可以每分钟运行一次,而不是每隔几秒钟运行一次。我怀疑答案很可能涉及服务经纪人队列。如果表格返回过期数据,它有多重要?即如果该表尚未同步,是否应该阻止“选择”? – 2011-02-09 23:39:22

+0

不需要。保持表格可选更好。这是很难的要求。至于不同步的时间......可能会有一两分钟不同步。 – 2011-02-10 00:05:05

回答

0

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

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

如果有人想了解更多细节,请告诉我,我会更新这篇文章。

相关问题