Ошибка преобразования при преобразовании значения nvarchar в тип данных int во время массовой вставки - PullRequest
0 голосов
/ 24 июня 2019

У меня есть простой пример таблицы базы данных с именем test, где столбец name представляет собой nvarchar, а столбец value представляет собой decimal,9,2

Я пытаюсь понятьпочему следующий оператор SQL не выполняется:

insert into [test] ([name], [value]) values ('test1', '33.9'), ('test2', 33)

Это приводит к ошибке

[22018] [Microsoft] [Собственный клиент SQL Server 10.0] [SQL Server] Преобразование завершилось неудачно, когдапреобразование значения varchar '33 .9 'в тип данных int.(245)

В этом сценарии, поскольку одно из значений 33.9 было указано как string, MSSQL пытается преобразовать все из них в int?

Некоторые другие примеры, которые действительно работают:

Это работает, когда оба значения numeric:

insert into [test] ([name], [value]) values ('test1', 33.9), ('test2', 33)

, и это работает, когда оба значения string:

insert into [test] ([name], [value]) values ('test1', '33.9'), ('test2', '33')

также работает, когда одно значение равно string, а другое - numeric, если они легко приводятся к типу int:

insert into [test] ([name], [value]) values ('test1', '33'), ('test2', 33)

, оно также работает, если вы вставляете ихпо одному:

insert into [test] ([name], [value]) values ('test1', '33.9')
insert into [test] ([name], [value]) values ('test1', 33)

Приложение:

Теперь - простой ответ «просто используйте тот же тип данных».То, как мы обнаружили эту ошибку, было во время массовых вставок, когда данные берутся из приложения и вставляются.

Кажется странным, что этот один конкретный способ дает сбой только тогда, когда он вполне с удовольствием справится со всеми другими сценариями.включая вставку по одному.

Есть ли способ отключить это поведение?Или объяснение того, почему это вообще происходит?Это не происходит в mySQL, Postgres и т. Д. - все они работают.

"Почему в вашем предложении VALUES есть несовместимые типы? Проблема (кроме строки) заключается в том, чтотипы несовместимы "

В этом сценарии мы хранили значения GPS (которые являются плавающими).Случайно, возвращенный выходной сигнал GPS изменился с -33.001 до -33 во время движения автомобиля (т. Е. «Точный» выходной сигнал GPS целого числа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...