2016-01-20 52 views
0

我正在尋找更好的方法來嘗試解決此問題,因爲我當前的解決方案非常耗時且效率低下。TSQL批量插入:使用源文件名填充列

我有許多文本文件,都包含1列。

我使用BULK INSERT將該信息加載到SQL表中,但我希望能夠告訴從哪個文件加載數據並將其填充到列中。

現有的工作流程是在文本編輯器創造了一系列BULK INSERT和UPDATE語句,然後如下運行它們一前一後:

現有的工作流程

CREATE TABLE #TEMP(MYDATA VARCHAR(MAX), FILENAME VARCHAR(MAX)) 

    BULK INSERT #TEMP FROM 'C:\MYFILE_1.TXT' WITH (FORMATFILE = 'C:\FORMATFILE.FRM') 

    UPDATE #TEMP SET FILENAME = 'MYFILE_1.TXT' WHERE FILENAME IS NULL 

    BULK INSERT #TEMP FROM 'C:\MYFILE_2.TXT' WITH (FORMATFILE = 'C:\FORMATFILE.FRM') 

    UPDATE #TEMP SET FILENAME = 'MYFILE_2.TXT' WHERE FILENAME IS NULL 

    BULK INSERT #TEMP FROM 'C:\MYFILE_3.TXT' WITH (FORMATFILE = 'C:\FORMATFILE.FRM') 

    UPDATE #TEMP SET FILENAME = 'MYFILE_3.TXT' WHERE FILENAME IS NULL 

這是一個可怕的工作流程,越慢越多的行被插入到表中。

有沒有人有辦法在做BULK INSERT或至少以更有效的方式做到這一點?

非常感謝

+1

你有沒有考慮使用SSIS像這樣的工作嗎?當你有更復雜的工作流程等時,使用SSIS的好處變得更加明顯。 –

+0

感謝您的回覆@WindsofChange。不,我沒有看過SSIS路線。你能給我一個關於如何實現這個目標的粗略工作流程,然後我會去做我自己的研究嗎?謝謝 – Ninja

+0

SSIS是一個ETL(提取,轉換,加載)工具。它允許你開發一個程序來加載和轉換你正在加載的數據。例如,您可以加載數據源(作爲參數傳入,或者可以遍歷文件夾並在其中加載所有內容)。您可以轉換加載的數據以在列中包含硬編碼值(例如數據源文件位置),然後使用該列將其批量插入到表中。 與僅編寫SQL腳本相比,它涉及的內容更多,但對於受益於實際過程的ETL工作而言,它的靈活性要大得多。 –

回答

0

與大多數的問題,我相信有很多有效的方法可以做到這一點。但是,我會通過聲明文件名變量,然後在批量插入文件中插入文件名來動態執行此操作。 這可能會有點複雜,並且可以很好地使用光標循環來完成。

另一種選擇是將一列添加到txt文件,其中的文件名與文件名相同。我相信這可以通過PowerShell的等照本宣科..

我知道我的答案是模糊的,讓我知道,如果你想舉幾個例子

+0

感謝您的回覆@E。僧。我會看看變量選項。不幸的是我不能修改原來的文本文件,因爲它們在特定的結構中。 – Ninja