2012-06-19 62 views
0

我有一個表:批量插入到表

CREATE TABLE [dbo].[tempTable](
    [id] [varchar](50) NULL, 
    [amount] [varchar](50) NULL, 
    [bdate] [varchar](50) NULL 
) 

旁邊插入語句:

BULK INSERT dbo.tempTable 
    FROM 'C:\files\inv123.txt' 
    WITH 
     (
     FIELDTERMINATOR ='\t', 
     ROWTERMINATOR ='\n' 
    ) 

我得到一個錯誤:在文件

Bulk load data conversion error (truncation) for row 1, column 3 (bdate).

數據例如:

12313 24 2012-06-08 13:25:49 
12314 26 2012-06-08 12:25:49 
+0

我建議用這個代替:'LOAD DATA INFILE'massivequeryvalueshere.txt'INTO TABLE'yourtable'FIELDS TERMINATED BY','',使用'FIELDTERMINATOR'的'TERMINATED BY'來代替。 – AleksanderKseniya

+0

它是sql服務器 – Polaris

+0

是FIELDTERMINATOR ='\ t'還是空格? –

回答

0

它確實看起來好像沒有劃定界限。我必須按列分隔符行分隔符分隔行,因爲文本文件在最後一個值需要我花一段時間才能找到後有一個後分支(和不必要的)列分隔符。這些日期肯定會適合格式(假設在一個巨大的文件中沒有一些不好的數據是你無法直觀地發現的,並且因爲它默認情況下不會失敗,直到10個錯誤都會出現,至少會有很多不良記錄),它看起來像是正確地說明了這一點。查看十六進制文件中的一個很好的文本編輯器,如果你能看到或只是嘗試:

BULK INSERT dbo.tempTable 
FROM 'C:\files\inv123.txt' 
WITH 
    (
    FIELDTERMINATOR ='\t', 
    ROWTERMINATOR = '\t\n' 
) 

另一種可能(我懷疑考慮到它是varchar(50))是有在inv123.txt文件和頭標題被認爲是一行,並且超過了varchar(50),這是被截斷的內容。在這種情況下,您可以添加

FIRSTROW = 2, 

如果這些東西后仍失敗,試圖迫使一些數據或搶在errorring所以你真正瞭解問題的所在行。查看set ansi_warnings off或使用ERRORFILE,具體取決於SQL SERVER的風格或使用文本作爲數據類型創建臨時表。 SQL Server 2005強制實施更嚴格的數據驗證,並強制插入不會失敗,但是可以完成。