2012-10-24 95 views
2

今天,我有一個從固定寬度的文件批量插入這樣的:SQL - 批量插入和數據類型

BULK INSERT #TBF8DPR501 
FROM 'C:\File.txt' WITH (
     FORMATFILE = 'C:\File.txt.xml' 
     ,ROWTERMINATOR = '\n' 
     ) 

格式文件只是設置每個字段的寬度,體積後插入臨時表,我製作了一個INSERT INTO X SELECT FROM temp來轉換批量無法轉換的一些列。

我的問題是,是否有可能使批量插入能值轉換,如:

  • 格式日期dd.MM.yyyy OR ddMMyyyy
  • 十進制值這樣0000000000010022(它是)

無需將批量插入到臨時表中來轉換值?

回答

0

不,它不是:BULK INSERT只是儘可能快地複製數據,它不會以任何方式轉換數據。你現在使用臨時表的解決方案是數據倉庫和報告場景中常用的解決方案,所以如果它以你想要的方式工作,我會繼續使用它。

如果您確實想在加載過程中進行轉換,那麼您可以使用ETL工具,如SSIS。但是你現在的做法沒有錯,SSIS將是一個非常「重」的選擇。

+0

我唯一的問題是,現在需要4個小時才能運行(txt與30GB),即時試圖減少這個值只保留在SQL服務器內,沒有什麼可以在SQL內完成?謝謝 – Hamarict

+0

如果你真正的問題是性能問題,你爲什麼要問格式化數據?您是否已閱讀並遵循關於優化批量操作的[documentation](http://msdn.microsoft.com/zh-cn/library/ms190421(v = sql.105).aspx)? – Pondlife

+0

是的,我已經嘗試了大多數優化(批量記錄/鎖定/等),但速度不會改善..到目前爲止,我設法做的是使用openrowset與批量選項..這種方式我設法刪除臨時表並在讀取數據時插入數據。我設法減少了3個小時的時間..不知道我還能做些什麼 – Hamarict