ODS中删除一条记录时设置EndDate为GetDate()

Set EndDate to GetDate() when a record is deleted in the ODS

我有以下数据流:

我要合并的地方:

ODS 左连接:

SELECT bn.EmployeeId
      ,bn.CountryId
      ,bn.OdsCreateDate FROM ODS.BridgeNationality bn
WHERE bn.EmployeeId=15366

DWH右加入

SELECT bn.EmployeeId
      ,bn.CountryId
      ,bn.InsertDate
      ,bn.BI_EndDate FROM DWH_Amaris.dwh.BridgeNationality bn
WHERE bn.EmployeeId=15366

合并联接类型:完全外部

在条件拆分转换中,在删除条件中我输入:

!ISNULL(EmployeeIdDWH) && ISNULL(CountryIdODS)

并且在删除分支后的 OLE DB 命令中:

我正在更新 ODS 中不再存在的记录的结束日期:

UPDATE [DWH].[BridgeNationality]
   SET [BI_EndDate] = GETDATE()
 WHERE [EmployeeId] = ?
AND CountryId=?

比如我在 DWH 中的例子:

EmployeeId CoutryId  InsertedDate EndDate 
15366      US        2020-03-18   9999-12-31         
15366      FR        2020-03-18   9999-12-31 

在 ODS 中:

EmployeeId CoutryId   
15366      US                 

我们可以看到 ODS 中的 FR 国籍已被删除,因此我需要将 DWH 中具有 FR 的记录的 EndDate 更新为 GETDATE(),如下所示:

    EmployeeId CoutryId  InsertedDate EndDate 
    15366      US        2020-03-18   9999-12-31         
    15366      FR        2020-03-18   2020-03-19

问题是每次我执行程序包时,它总是更新 DWH 中具有 FR 国籍的记录,但是它应该完成一次。

您必须添加记录的结束日期为“9999-12-31”,如下所示:

!ISNULL(EmployeeIdDWH) && ISNULL(CountryIdODS) && BI_EndDate == (DT_DATE)"9999-12-31" 

否则,更新将像您的情况一样无限。