0

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

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

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

  • 日志表记录表中的更改,但我无法在 SQL 中放置其他过滤器,它告诉我哪些更改与“描述”列关联为“xyz”。

4

2 回答 2

0

你可以通过两种方式做到这一点

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

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

于 2020-08-25T19:01:55.200 回答
0

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

这是一个非常简单的示例update示例,用于存储 RowID、 ActivityTypeoutput的前后值:

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
于 2020-08-25T18:41:08.247 回答