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

时间:2011-11-30 20:29:30

标签: business-intelligence ssis bids

这是交易;问题不在于将CSV转换为SQL Server,而是让它按照我想要的方式运行...我想这总是问题所在:)

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

根据我们每15分钟运行一次工作的逻辑,我们将获得大量重叠数据。我想我会使用一个变量,比如LastCollectedTime,可以使用MAX(READTIME)从我的SQL数据库中提取。我的问题在于我只想收集比该变量更新的读取时间的行。

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

有什么想法吗?请记住,我们的读取时间是派生列,不确定它是否重要。

1 个答案:

答案 0 :(得分:2)

以下是一种可以使用的方法:

假设您在SQL Server中的目标表名为BarcodeData

  1. 在数据库中创建一个临时表(比如说BarcodeStaging,其列目结构与导入CSV数据的目标表BarcodeData相同

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

  3. 将CSV数据导入临时表BarcodeStaging导入实际目标表。

  4. 使用MERGE语句(我假设您使用的是SQL Server 2008或更高版本)来比较登台表BarCodeStaging和实际目的地表BarcodeData使用DateTime列作为连接键。如果存在不匹配的行,则从登台表中复制行并将其插入目标表。

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

    希望有所帮助。