2015-06-21 60 views
1

我想在批量插入數據的地方設置中使用小數點分隔符作爲逗號。 數據如下:使用區域分隔符在SQL Server中批量插入

RegionName Value_1 Value_2 Value_3 
Region 1 27,48 66,41 32,82 
Region 2 38,93 45,80 61,83 
Region 3 38,17 58,02 35,11 
Region 4 34,35 16,03 29,01 
Region 5 67,94 58,02 17,56 

我使用這個腳本進行批量插入:

create table RegVaues (
RegionName varchar(30) 
,Value_1 float 
,Value_2 float 
,Value_3 float 
) 
go 

bulk insert RegVaues 
from N'A:\TestValues.txt' 
with 
(
DATAFILETYPE = 'widechar' 
,fieldterminator = '\t' 
,rowterminator = '\n' 
,firstrow = 2 
,keepnulls 
) 
go 

履行紙條後,我收到一個錯誤:

sg 4864, Level 16, State 1, Line 2 Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 2 (Value_1).

當我嘗試與作爲分隔符的點相同 - 所有作品。我試圖插入不同類型的數據(float,decimal,numeric)。在我的SSMS的工具 - >選項 - >國際設置中,語言設置爲「與Microsoft Windows相同」。數據庫整理是Ukrainian_CI_AS。但仍然無法插入帶有逗號分隔符的數據。我做錯了什麼?

+0

'bulk insert'不支持本地化的小數點分隔符。這是非常意外的。當我遇到同樣的問題時,我花了好幾天的時間試圖弄清楚我錯過了什麼。 – Andomar

+0

謝謝Andomar!顯然,正如M.Ali回答的那樣,解決方案是用小數點代替逗號並使用臨時表。 –

回答

0

那麼錯誤是不言自明的,其中逗號的值不是浮點值,並且當您要將值如27,4866,41插入到浮點列中時,它會嘗試將它們的值轉換爲浮點並因此失敗,信息。

一個簡單的解決方案是首先將列數據類型字符(VarChar)插入到暫存/暫存表中,然後用小數點替換逗號,然後使用它們的值插入到最終目標表中。

另外請注意,浮點數是一種近似的數據類型,只能用於近似值(如地球的質量和行星之間的距離等),精確值使用DECIMALNUMERIC數據類型。