Я хочу сделать массивную вставку данных, где разделитель десятичной запятой - это запятая, как в региональных настройках. данных являются следующими:Массовая вставка в 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. Но все же данные с разделителем запятой не могут быть вставлены. Что я делаю неправильно?
'bulk insert' не поддерживает локализованные десятичные разделители. Это очень неожиданно. Когда я сталкивался с той же проблемой, я провожу несколько дней, пытаясь понять, что я пропустил. – Andomar
Спасибо Andomar! По-видимому, решение, как ответил М.Али, заключается в замене запятых на десятичную точку и использовании промежуточной таблицы. –