2010-11-01 130 views
0

我從sql server 2005中的批量加載中得到以下錯誤消息,並且在想法後我可以嘗試解決此問題。SQL Server 2005 - 大容量插入問題

第2行第4列(類型)的批量加載數據轉換錯誤(指定代碼頁的類型不匹配或無效字符)。

BULK INSERT dbo.BobTable FROM 'C:\DataFiles\Bob.txt' 
WITH (FIELDTERMINATOR = '","', FIRSTROW=2,ROWTERMINATOR = '\n',DATAFILETYPE='char') 

任何想法?

"id","altid","altid2","type"  
123456789.00,"ABC1234","ABC1234","R" 

我無法更改源文件,但我可以更改它正在插入的表。 (不要問我爲什麼,但小數已經在ID的末尾插入......我只是來對付它。)

CREATE TABLE [dbo].[BOB](
    [id] [nvarchar](50) NULL, 
    [Altid] [nvarchar](50) NULL, 
    [Altid2] [nvarchar](50) NULL, 
    [type] [nvarchar](50) NULL 
) 

回答

2

批量插入不擅長處理報價和逗號分隔符沒有格式文件的幫助。您需要創建或生成一個,然後使用批量插入引用它。

在您的示例中,第一個字段以,"而非","結尾,因此SQL認爲該字段太長。

這裏是一個很好的起點: Creating a Format File

而這其中的格式文件,其中也有你的問題的例子應用:Using a Format File to Bulk Import Data

我以前並使用這些方法如果您的文件格式隨着時間的推移而變化,則可能會遇到挑戰,但它爲您提供了BULK INSERT流程所需的靈活性。

另外,你是否可以使用SSIS進行這項工作? SSIS可以處理報價和逗號分隔的文件,而不會比BCP格式文件更痛苦。如果您有選擇,我完全推薦它。