2013-08-29 147 views
2

我知道該怎麼做批量插入我可以這樣做:SQL中使用BULK INSERT

BULK INSERT tblName FROM 'c:\bulktext.text' With (FIELDTERMINATOR = ',') 

我只有在bulktext.text 4列,但tblName有20列。我如何只將這5列插入到tblName中。

有沒有辦法說哪列應該在BULK聲明

+0

使用格式文件:http://msdn.microsoft.com/en-gb/library/ms179250.aspx或在一些臨時表或臨時表中轉儲整個數據,然後將其複製到主表中。 – Sonam

+0

我很困惑 - 你的文件有比列表還多的列嗎?而且它是4,5,20? –

回答

4

插入雖然你可以使用格式文件與BULK INSERT來處理這個問題,我覺得這個方法非常繁瑣,而且容易出錯。因人而異。其他的想法:

  1. 插入到一個臨時表,並且只能插入所需的列到目標
  2. 使用像OPENROWSET另一種方法(散裝或SSIS或BCP
  3. 寫一個預解析器將採取文件和輸出的新文件,只有相關列
  4. 變化無論是生產,只有相關列

在以前的項目這些文件輸出的其他文件中,我們使用(3)至O我們有很大的優勢 - 我們能夠重新編寫文件,而無需使用無用的數據來擾亂SQL,並在流水線早期拒絕無效的數據。

+0

這是正確的嗎? [這不是做OP的目的嗎?](http://technet.microsoft.com/en-us/library/ms191175(v = sql.105).aspx) – bhs

+0

@bhs: - 是的,這是正確的。這只是做OP想要的另一個想法!我分享了你提到的想法! :) –

+0

這個答案已經從原來的編輯,說它不可能使用格式文件。 – bhs

0

您可以使用Microsoft推薦的特製格式文件的方法,如BOL here 中所述。如果這是一個問題,您可能想使用上面的@Aaron Bertrand方法。

0

信不信由你,創建一個只映射這四列的視圖,然後也可以工作,而且它比格式文件更容易。

但是@AaronBertand提出的使用專用登臺表的建議確實是一個更好的主意(這是大多數DBA通常所做的)。