4

我想批量插入小数分隔符为逗号的数据,就像在区域设置中一样。数据如下:

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,第 16 级,状态 1,第 2 行第 2 行第 2 列 (Value_1) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

当我尝试使用点作为分隔符时 - 一切正常。我试图插入不同类型的数据(浮点数、小数、数字)。在我的工具->选项->国际设置中的 SSMS 中,语言设置为“与 Microsoft Windows 中的相同”。数据库排序规则是 Ukrainian_CI_AS。但是仍然无法插入带有逗号分隔符的数据。我做错了什么?

4

1 回答 1

1

好吧,错误是不言自明的,其中带有逗号的值不是浮点值,当您将 , 之类的值插入27,48浮点66,41列时,它会尝试将它们的值转换为浮点数,但它会失败,因此会出现错误消息。

一个简单的解决方案是首先使用列数据类型字符 (VarChar) 将数据插入到保存/暂存表中,然后用小数点替换逗号,然后使用它们的值插入到最终目标表中。

另外请注意,浮点数是一种近似数据类型,仅应用于近似值,例如(地球质量和行星之间的距离等),用于精确值使用DECIMALNUMERIC数据类型。

于 2015-06-21T01:27:08.143 回答