2016-11-15 51 views
0
前一天

我已经加载的所有从表A,其中表A有一个名为SQL更新从

CreatedDate(DateTime) 

我抄只是这个表这实际上是有用的内容领域的内容。

而不是使用SQL代理安排一项工作来每隔一天复制一次该表,我想附加数据并只插入添加的所有新数据,或许会做一些可能在最后一天受到影响的更新。

只是想知道最好的方法来做到这一点考虑到我们已经加载了初始数据,但只是想每天追加新的数据。

我在想这样做下面的SQL where子句中:

CreatedDate between getdate()-1 and getdate() 

这是做的最好的方法是什么?

谢谢

+1

你能得到上一次运行的MAX(Cre​​atedDate)吗?如果可以的话,你可以在你的where子句中使用它,比如'CreatedDate> MAX(Cre​​atedDate)'。 – wdosanjos

+0

AS wdosanjos指出,目标表的MAX(Cre​​ateDate)将帮助您识别较低范围,然后使用GETDATE()作为上层作品。唯一的一点是,这将帮助您识别新记录,但您提到想要查找更改,记录是否可以更新?如果是这样,你需要一个版本指示器或另一列表明可能像UpdateDate一样存在? Afterwords 2操作更新和插入相当容易,但我不推荐它是个人的,因为它可能存在复杂的问题MERGE()也可以使用 – Matt

回答

0

这正是SSIS所面临的情况。基本上你只想每天只加载新数据,在ETL过程中,这就是所谓的incremental load

完成预期结果的最佳方法是创建一个ETL,让它只抓取MaxDateTime> CreatedDate(或ModifiedDate,假设您有该列并且您希望包含对以前数据的更新)的数据。如果你的CreatedDate没有改变,如果以前的数据被修改,那么你需要添加一个查找和条件分割来通过数据。

然后,您将创建一个SQL代理作业以每天运行增量ETL。