2013-07-25 113 views
1

我正在開發一個基本上需要將CSV文件導入到SQL Server 2008 R2數據庫的項目。 CSV文件是由Excel文件生成的,該文件由「經理」填寫,PR員工時間爲他的員工。這還包括一些額外的信息,例如員工正在從事的工作和階段,還包括設備的小時數(如果使用的話)。SQL Server 2008 - TSQL讀取CSV文件

爲此生成一個CSV文件後,它不完全是通常的直接「列」CSV文件。它更像是一個基於「行」的CSV文件,每行都是獨一無二的。由於涉及到這個警告,我不能對SQL執行直接轉儲(使用BULK插入或OPENROWSET),這必須使用適當的列填充數據創建(臨時)表。

我正在尋找使用CSV文件中的字段,該字段的「位置」在該行中的位置。

因此,基本上數據的位置將保持不變,因爲每個CSV都基於TEMPLATE文件 - 因此,我所要做的就是使用SQL代碼導航CSV文件,以便根據它找到正確的字段在ROW中的位置。我希望這能讓你們更好地理解我想在這裏實現的目標。 對不起長長的文字。

我研究了一下,這裏就是我來了這麼遠:

讀取CSV文件到一個臨時表通過自定義的SQL函數 https://www.simple-talk.com/sql/t-sql-programming/reading-and-writing-files-in-sql-server-using-t-sql/

(從文件 念臺詞)

這一個很有趣。將整個文件轉儲爲BLOB,然後可以篩選數據。 http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/

最後,這一個必不可少的分割行和創建分隔每行記錄。有趣的.. http://ask.sqlservercentral.com/questions/17408/how-to-read-a-text-file.html

如果有人有任何建議或步驟,我可以按照通過這一點,我將不勝感激。

對於MODS:如果我發佈了一些不應該在這裏的東西(特別是鏈接),請隨時刪除它。我很抱歉,如果我做到了。

非常感謝..希望聽到一些積極的迴應! :)

親切問候, Pranav

+0

我想直接從Excel中加載是不可能的? – tkendrick20

+0

會有UNPIVIOT/PIVOT功能嗎?即轉儲文件,然後使用存儲的proc來安排你想要的數據? –

+0

@ tkendrick20我不能直接使用Excel,因爲它不完全是一個Excel文件。它沒有明確的「專欄」。從該Excel文件生成的CSV文件基本上是一個帶有「行」數據的文件,它沒有任何關聯的FIXED列。 – SillyCoda

回答

0

如果文件不是太大,另一個選擇是進行後處理使用VBA宏在Excel文件。當然,您需要加快使用Excel對象模型和VBA的速度,但錄製功能使其非常簡單。 VBA方法的一個優點是,看起來你確實希望逐行處理,而VBA更適合這樣做,而SQL更適合基於集合的操作。