查询SQL表,仅将更新的行传输到其他数据库

问题描述

我有一个不断更新的数据库表。我只想查询在列中具有特定属性的行上所做的更改/添加。例如获取已更改/添加的行,其“描述”列为“ xyz”。我的最终目标是将这些行复制到另一个数据库中的另一个表中。这有可能吗?不只是查询和覆盖另一个数据库中的行的原因是为了避免效率低下。

到目前为止我尝试过什么?

  • 我能够在表上选择查询获取行,但它为我提供了所有行,而不是已更改或最近添加的行。如果我将这些行添加到另一个数据库的表中,那么我唯一的选择就是覆盖这些行。

  • 日志表将更改记录到表中,但是我无法在sql中放置其他过滤器,sql告诉我这些更改中的哪些与“ description”列关联为“ xyz”。

解决方法

编写update语句以利用OUTPUT捕获前后值并将它们记录到您选择的表中。

这是一个非常简单的示例update,该示例使用output存储 ActivityType 列的值前后的RowID:

DECLARE @MyTableVar table (  
    SummaryBefore nvarchar(max),SummaryAfter nvarchar(max),RowID int
    );  

update DBA.dbo.dtest set ActivityType = 3
OUTPUT deleted.ActivityType,inserted.ActivityType,inserted.RowID
    INTO @MyTableVar  

    select * From @MyTableVar
,

您可以通过两种方式完成

  1. 具有新的日期字段/列,例如update_time和/或create_time(如果需要,可以默认设置)。这些字段将指示记录的状态。您需要保存您的previous_run_time,然后您的选择查询将查找update_time / create_time大于previous_run_time的记录,然后将这些记录移至新的数据库。

  2. 已打开CDC的源表,该表在SQL Server中默认可用,然后仅移动那些已受影响的记录。