删除数据库中的条目而不引用

时间:2017-10-26 12:52:23

标签: mysql sql-server database

我们有以下要求:

目前,我们从源(另一个服务器,另一个团队,另一个数据库)获取数据到临时数据库(通过批处理作业),在我们将数据输入临时数据库后,我们处理数据,转换和更新我们的主数据DB与差异(即更改的记录或新添加的记录)。

Source-> tempDB(每日重新创建) - > delta-> primaryDB

要求: - 在源DB中删除数据后删除主数据库中的数据。 例如:假设在源代码中创建了ID = 1的记录,它将进入临时数据库并最终进入主数据库。在源中删除此记录时,它也应在主DB中删除。

挑战: 如果在临时数据库中没有任何内容可以引用,我们如何从主数据库中删除(因为记录已在源代码中删除,tempDB中没有任何内容)。

天真的做法: - 我们可以在每次转换和重新加载之前清理主DB。但是,每次清理和填充主数据库需要花费大量时间。

2 个答案:

答案 0 :(得分:1)

您可以在每个填充已删除条目的历史记录表的表上创建触发器。将其同步到tempDB并使用它来删除主数据库中的内容。

您要么每个表需要一个“delete-history-table”,要么还要包含触发删除的tablename的组合历史记录表。

您可能希望查看SQL Compare或其他工具来同步表。

如果您可以同时访问tempDB和primeDB(相同的服务器或链接服务器),您也可以尝试

delete * 
from primeBD.Tablename 
where not exists (
    select 1 
    from tempDB.Tablename where id = primeDB.Tablename.Id
)

会表现得非常糟糕 - 请问您的数据库设计师。

答案 1 :(得分:1)

在这个场景中,如果TEMPDB&主数据库没有直接引用,然后可以在数据库级别使用跟踪事件通知。

这是我得到的链接:

https://www.mssqltips.com/sqlservertip/2121/event-notifications-in-sql-server-for-tracking-changes/