2011-11-30 103 views
0

這是交易;問題不在於獲取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

回答

2

這是一種方法,你可以使用:

讓我們假設,在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

相關問題