使用SSIS从CSV导入最新的数据到SQL Server

问题描述:

这是交易;问题不在于获取CSV到SQL Server,它得到它的工作方式,我想如何...我认为总是这个问题:)使用SSIS从CSV导入最新的数据到SQL Server

我有一个CSV文件,列如:DATE, TIME, BARCODE, etc...我使用一个派生列转换,将DATETIME连接成一个DATETIME,用于导入SQL Server,并将所有数据导入数据库。问题是我们每12小时才会得到一个新的.CSV文件,例如我们会说.CSV会在一分钟内更新四次。

有了我们每15分钟运行一次这个工作的逻辑,我们将得到大量的重叠数据。我想我会使用一个变量,如LastCollectedTime,它可以使用MAX(READTIME)从我的SQL数据库中提取。我的问题是因为我只想收集具有比该变量更近的readtime的行。

目的地表结构: ID, ReadTime, SubID, ...datacolumns..., LastModifiedTime其中LastModifiedTime的最后一个插入的默认值为GETDATE()

任何想法?记住,我们的阅读时间是一个派生列,不知道它是否重要。

+0

不是在这种情况下,没有。该供应商已经设置为不断加载到.csv 12小时,然后开始一个新的.csv - 这是我们的控制 – Tom

这是一种方法,你可以使用:

让我们假设,在SQL Server的目标表被命名为BarcodeData

  1. 在你的数据库具有相同的列结构成CSV数据导入到目标表BarcodeData创建临时表(说BarcodeStaging

  2. 在SSIS包中,在数据流任务之前添加一个Execute SQL Task以截断登台表BarcodeStaging

  3. 将CSV数据导入到临时表BarcodeStaging而不是到实际目标表中。

  4. 使用MERGE声明(我假设你使用的是SQL Server 2008或更高版本),比较临时表BarCodeStaging并使用DateTime列作为连接键的实际目标表BarcodeData。如果有不匹配的行,请复制临时表中的行并将它们插入到目标表中。

的Technet链接MERGE声明:http://technet.microsoft.com/en-us/library/bb510625.aspx

希望有所帮助。

+0

工作很好,谢谢!希望它可以在SSIS中完成,以减少出错的空间,但现在这是一个可行的解决方案。 – Tom