这是交易;问题不在于将CSV转换为SQL Server,而是让它按照我想要的方式运行...我想这总是问题所在:)
我有一个包含以下列的CSV文件:DATE, TIME, BARCODE, etc...
我使用派生列转换将DATE
和TIME
连接到DATETIME
,以便导入到SQL Server ,我将所有数据导入数据库。问题是我们每12小时才会收到一个新的.CSV文件,例如我们会说.CSV会在一分钟内更新四次。
根据我们每15分钟运行一次工作的逻辑,我们将获得大量重叠数据。我想我会使用一个变量,比如LastCollectedTime
,可以使用MAX(READTIME)
从我的SQL数据库中提取。我的问题在于我只想收集比该变量更新的读取时间的行。
目标表结构:
ID, ReadTime, SubID, ...datacolumns..., LastModifiedTime
其中LastModifiedTime
在最后一次插入时的默认值为GETDATE()
。
有什么想法吗?请记住,我们的读取时间是派生列,不确定它是否重要。
答案 0 :(得分:2)
以下是一种可以使用的方法:
假设您在SQL Server中的目标表名为BarcodeData
。
在数据库中创建一个临时表(比如说BarcodeStaging
),其列目结构与导入CSV数据的目标表BarcodeData
相同
在SSIS包中,在数据流任务之前添加Execute SQL Task
以截断登台表BarcodeStaging
。
将CSV数据导入临时表BarcodeStaging
,不导入实际目标表。
使用MERGE
语句(我假设您使用的是SQL Server 2008或更高版本)来比较登台表BarCodeStaging
和实际目的地表BarcodeData
使用DateTime列作为连接键。如果存在不匹配的行,则从登台表中复制行并将其插入目标表。
Technet链接到MERGE
声明:http://technet.microsoft.com/en-us/library/bb510625.aspx
希望有所帮助。