2011-05-09 38 views
1

我確定這是一個常見問題,但我似乎無法找到我正在尋找的幫助。道歉!SQL Server批量插入 - 如何定義缺少的字段?

我試圖從CSV文件執行批量插入 - 我需要插入數據的表中有幾個字段不能爲空 - 就像通常使用newid()生成的行唯一標識符字段,以及一些其他領域,如進行更改的用戶的ID號等等...

在網上討論,我想我知道如何做一個基本的批量導入,如果CSV文件包含相同數量的字段該表,或者如果可以將缺少的字段保留爲空或缺省值,但是我一直無法找到某處顯示如何從CSV文件中分配一些值,並且還預定義了其他所需的表值。如果有人能告訴我如何從CSV導入數據,我可以在存儲過程中指定缺少的變量字段,這將非常有幫助!

任何提示?這是我一直試圖用來完成這個工作的代碼。

BULK 
INSERT tbl1_ 
FROM '\\...\importtest.txt' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO 
--Check the content of the table. 
SELECT * 
FROM tbl1_ 
GO 
--Drop the table to clean up database. 
SELECT * 
FROM tbl1_ 
GO 
+0

可能重複[BULK INSERT列數不一致](http://stackoverflow.com/questions/2601941/bulk-insert-with-inconsistent-number-of-columns) – 2011-05-09 17:59:18

+0

@Dustin Laine:不完全是相同特定一個,但也有其他重複的 – gbn 2011-05-09 18:05:26

+0

可能重複的[時用於批量複製程序(BCP)的格式文件(http://stackoverflow.com/questions/1994411/when-to-use-a- format-file-for-bulk-copy-program-bcp) – gbn 2011-05-09 18:06:41

回答

2

您是否看到過適用於bcp和BULK INSERT的「Keeping Nulls or Using Default Values During Bulk Import」? 我沒有了一會兒做到了這一點(我會加載一個簡單的臨時表和在單獨的沖洗步驟後充實),但它看起來像默認設置可以保存,當你使用:

INSERT ... SELECT * FROM OPENROWSET(BULK...) 

丟失列,您需要使用format files

這兩種看法略有不同。就個人而言,我會加載一個臨時表,然後從中複製,以便CSV和臨時表列匹配。然後,我會在第二步加載「真實」表格。這使您可以先驗證數據,或者執行一些post-bcp處理。

+0

嗯,我可以做到這一點,使用臨時表,然後將其複製到真正的表。不過,我希望有一個更優雅的解決方案。我確實看過格式文件頁面,但我不確定這是否會讓我做我想做的事情。我會再看看它,並權衡我的選擇。謝謝! – Joshua 2011-05-09 18:14:28