2013-09-25 93 views
0

我想設置一個自動作業來連續插入多個txt文件到表中。通過文件名和DateStamp連續導入多個txt文件

我有多個數據採集器輸出多個(每分鐘).txt文件,並用它們的日期戳即20130921_1755.txtYYYYMMDD_HHMM.txt)命名。他們還有一個名爲DateStamp的字段,其中每個記錄包含第二個日期值。

我知道我想要我的查詢做....

  1. 插入從目錄中的所有文件名到表ALLFILENAMES
  2. 最終表中選擇最大日期TBLMEASUREMENTS
  3. 轉換最大日期的文件名( 2013-09-22 17:53:00 to「20130922_1753.txt」)
  4. 批量插入所有文件名>表格中的最大日期ALLFILENAMES

我已經用在這裏發現後啓動的進程: Import Multiple CSV Files to SQL Server from a Folder

我有麻煩試圖弄清楚如何選擇哪些特定的文件,我需要導入到表中。特別是因爲這是一項持續的工作,我需要不斷地查看數據庫以查看哪些文件尚未導入,然後導入它們。這是我的代碼到目前爲止工作導入多個文件。

--some variables 
declare @filename varchar(255), 
     @path  varchar(255), 
     @sql  varchar(8000), 
     @cmd  varchar(1000) 


--get the list of files to process: 
SET @path = 'C:\SQL_txt\1_hr\' 
SET @cmd = 'dir ' + @path + '*.txt /b' 
INSERT INTO ALLFILENAMES(WHICHFILE) 
EXEC Master..xp_cmdShell @cmd 
UPDATE ALLFILENAMES SET WHICHPATH = @path where WHICHPATH is null 


--cursor loop 
declare c1 cursor for SELECT WHICHPATH,WHICHFILE FROM ALLFILENAMES where WHICHFILE like '%.txt%' 
open c1 
fetch next from c1 into @path,@filename 
While @@fetch_status <> -1 
    begin 
    --bulk insert won't take a variable name, so make a sql and execute it instead: 
    set @sql = 'BULK INSERT Temp FROM ''' + @path + @filename + ''' ' 
     + '  WITH ( 
       FIELDTERMINATOR = ''\t'', 
       ROWTERMINATOR = ''\n'' 
      ) ' 
print @sql 
exec (@sql) 

    fetch next from c1 into @path,@filename 
    end 
close c1 
deallocate c1 

我一直LEFT,LEN玩耍和REPLACE,試圖最大郵戳轉換爲文件名,但有沒有運氣。任何幫助或建議都會有用。我在這個錯誤?謝謝

回答

0

我會做這與SSIS /數據工具。

導入從您的「監視」文件夾中的文件,然後將文件移動到不同的文件夾,使用:

  • foreach循環容器
  • 數據流任務
  • 文件系統任務
  • 派生列(可選,但建議用於源跟蹤)

可以在派生列中使用映射的filepath變量n來指示源文件,並且除非多次將相同文件添加到監視文件夾的危險,否則幾乎不需要每次都運行'has already been imported'檢查。

在SSIS很多教程可用,這裏有兩個: