【问题标题】:Set EndDate to GetDate() when a record is deleted in the ODS在 ODS 中删除记录时将 EndDate 设置为 GetDate()
【发布时间】:2020-06-30 11:08:36
【问题描述】:

我有以下数据流:

我在哪里合并:

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 中不再存在的记录的 EndDate :

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                 

我们可以看到 FR 国籍已在 ODS 中删除,因此我需要将 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 国籍的记录,但应该只更新一次。

【问题讨论】:

    标签: sql-server tsql ssis


    【解决方案1】:

    您必须添加记录在您的条件下具有 EndDate="9999-12-31" ,如下所示:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2021-01-21
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多