请查看以下暂存表。对于同一策略,它有多行。此表的数据是从我从外部来源收到的平面文件中加载的。
列值可以在一行到下一行之间更改。见 ColA。第一行中可能填充了有限的列。在接下来的行中将填充更多列。请参阅列 ColB 和 ColC,它们最初为 null,并填充在第二行和第三行中。
`CREATE TABLE #Stg
(
PolicyNum VARCHAR(10) ,
ColA VARCHAR(10) ,
ColB VARCHAR(10) ,
ColC VARCHAR(10) ,
TimeStampKey VARCHAR(100)
)
INSERT #Stg
( PolicyNum, ColA, ColB, ColC, TimeStampKey )
VALUES ( 'MDT1000', 'SomeVal_A1', NULL, NULL, '2013041113033140MDT1000ZA' )
,
( 'MDT1000', 'SomeVal_A2', 'SomeVal_B', NULL, '2013041113051756MDT1000ZA' )
,
( 'MDT1000', 'SomeVal_A3', 'SomeVal_B', 'SomeVal_C', '2013041113115418MDT1000ZA' )`
从这个临时表中,我需要在维护历史记录的同时将数据加载到目标表中。目标表基本上是类型 2 缓慢变化的维度。换句话说,我已经从暂存中加载了第一行,因为它不存在并用第二行更新它并用第三行再次更新。
以下是目标模式的示例:
CREATE TABLE #Dst
(
PolicyKey INT IDENTITY(1,1) PRIMARY KEY
, PolicyNum VARCHAR(10)
, ColA VARCHAR(10)
, ColB VARCHAR(10)
, ColC VARCHAR(10)
, IsActive BIT
, RowStartDate DATETIME
, RowEndDate DATETIME
)
通常我会编写一个合并语句或一个 SSIS 包来处理增量负载和 scd 尺寸,但由于原始记录和更改记录在同一个文件中,标准方法不起作用。
如果您能说明如何解决这个问题,我将不胜感激。我试图避免逐行操作。
谢谢,山姆。