使用SSIS从CSV导入最新的数据到SQL Server
这是交易;问题不在于获取CSV到SQL Server,它得到它的工作方式,我想如何...我认为总是这个问题:)使用SSIS从CSV导入最新的数据到SQL Server
我有一个CSV文件,列如:DATE, TIME, BARCODE, etc...
我使用一个派生列转换,将DATE
和TIME
连接成一个DATETIME
,用于导入SQL Server,并将所有数据导入数据库。问题是我们每12小时才会得到一个新的.CSV文件,例如我们会说.CSV会在一分钟内更新四次。
有了我们每15分钟运行一次这个工作的逻辑,我们将得到大量的重叠数据。我想我会使用一个变量,如LastCollectedTime
,它可以使用MAX(READTIME)
从我的SQL数据库中提取。我的问题是因为我只想收集具有比该变量更近的readtime的行。
目的地表结构: ID, ReadTime, SubID, ...datacolumns..., LastModifiedTime
其中LastModifiedTime
的最后一个插入的默认值为GETDATE()
。
任何想法?记住,我们的阅读时间是一个派生列,不知道它是否重要。
这是一种方法,你可以使用:
让我们假设,在SQL Server的目标表被命名为BarcodeData
。
在你的数据库具有相同的列结构成CSV数据导入到目标表
BarcodeData
创建临时表(说BarcodeStaging
)。在SSIS包中,在数据流任务之前添加一个
Execute SQL Task
以截断登台表BarcodeStaging
。将CSV数据导入到临时表
BarcodeStaging
和而不是到实际目标表中。使用
MERGE
声明(我假设你使用的是SQL Server 2008或更高版本),比较临时表BarCodeStaging
并使用DateTime列作为连接键的实际目标表BarcodeData
。如果有不匹配的行,请复制临时表中的行并将它们插入到目标表中。
的Technet链接MERGE
声明:http://technet.microsoft.com/en-us/library/bb510625.aspx
希望有所帮助。
工作很好,谢谢!希望它可以在SSIS中完成,以减少出错的空间,但现在这是一个可行的解决方案。 – Tom
不是在这种情况下,没有。该供应商已经设置为不断加载到.csv 12小时,然后开始一个新的.csv - 这是我们的控制 – Tom