2015-06-21 1 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! По-видимому, решение, как ответил М.Али, заключается в замене запятых на десятичную точку и использовании промежуточной таблицы. –

ответ

0

Ну, ошибка самоочевидна, значения с запятыми в них не являются значениями с плавающей запятой, и когда вы должны вставлять значения, такие как 27,48, 66,41 в столбец с поплавком, он пытается преобразовать их значения в float и он не работает, поэтому ошибка сообщение.

Простым решением было бы вставить данные в таблицу холдинга/промежуточной таблицы сначала с символом типа столбца (VarChar), затем заменить запятые на десятичную точку и затем использовать их значения для вставки в вашу конечную таблицу назначения.

Также обратите внимание, что вы плаваете приблизительный тип данных и должны использоваться только для приблизительных значений, таких как (масса земли и расстояние между планетами и т. Д.), Для точных значений используются DECIMAL или NUMERIC типы данных.