我想修改标准的SSIS行为。
EmployeeID是我的业务密钥和标题,名字,姓氏是类型2的属性。我希望BatchLogID能够反映发生更改的时间,否则它将保持不变。
BatchLogID作为int传递给数据流。
EmployeeID,标题,名字,姓氏,BatchLogID,开始日期,结束日期
源数据
101,小姐,简,史密斯,101 --第一次插入
101,小姐,简,史密斯,102进程运行
101,小姐,简,史密斯,103进程运行
101,小姐,简,史密斯,104个进程运行
101,Jane,Brown,105个进程运行--只有在数据发生变化时,我才想更新目标中的批号。
目标数据
101,小姐,简,史密斯,101,101,2000年1月1日,空-第一次插入
101,小姐,简,史密斯,105,105,2000年1月1日,2000年1月5日--随着检测到变化,数据被更新。
101,简夫人,布朗夫人,105,105 2000年1月1日--只有在数据更改为我要更新批号时,才为空。
有什么想法吗?
发布于 2022-02-22 21:40:08
您可能需要使用以下方法执行增量加载:
想了解更多:
https://www.c-sharpcorner.com/article/design-the-full-load-and-delta-load-patterns-in-ssis/
发布于 2022-02-23 08:15:38
使用sql merge命令-必须清洗两次
declare @batchLogID int= 1
MERGE dbo.targetTable AS t
USING dbo.sourceTable AS s `enter code here`
ON (t.[key] = s.[key] and t.endDate is null)
WHEN MATCHED and s.[value] <> t.[value]
THEN UPDATE SET t.enddate = dateadd(ss,-1,cast(cast(getdate() as date) as datetime))
WHEN not MATCHED
THEN INSERT (key,[col1], [col2], [value], [col3],startdate,BatchLogID)
VALUES (s.key,s.[col1], s.[col2], s.[value], s.[col3],cast(getdate() as date),@batchLogID)https://stackoverflow.com/questions/71217629
复制相似问题