我正在尋找更好的方法來嘗試解決此問題,因爲我當前的解決方案非常耗時且效率低下。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或至少以更有效的方式做到這一點?
非常感謝
你有沒有考慮使用SSIS像這樣的工作嗎?當你有更復雜的工作流程等時,使用SSIS的好處變得更加明顯。 –
感謝您的回覆@WindsofChange。不,我沒有看過SSIS路線。你能給我一個關於如何實現這個目標的粗略工作流程,然後我會去做我自己的研究嗎?謝謝 – Ninja
SSIS是一個ETL(提取,轉換,加載)工具。它允許你開發一個程序來加載和轉換你正在加載的數據。例如,您可以加載數據源(作爲參數傳入,或者可以遍歷文件夾並在其中加載所有內容)。您可以轉換加載的數據以在列中包含硬編碼值(例如數據源文件位置),然後使用該列將其批量插入到表中。 與僅編寫SQL腳本相比,它涉及的內容更多,但對於受益於實際過程的ETL工作而言,它的靈活性要大得多。 –