Ошибка арифметического переполнения при преобразовании varchar в десятичное - PullRequest
0 голосов
/ 11 сентября 2018

Почему это работает:

Declare @latitude varchar = '34.343';
Declare @decLatitude Decimal(9,6);
Set @decLatitude = CAST(@latitude AS Decimal(9,6));

Но это не так?

Declare @longitude varchar = '-92.6424';
Declare @decLongitude Decimal(9,6);
Set @decLongitude = CAST(@longitude AS Decimal(9,6));

Возвращает ошибку «Ошибка арифметического переполнения при преобразовании varchar в числовой тип данных».

Это в базе данных SQL Azure.

1 Ответ

0 голосов
/ 11 сентября 2018

Вы уверены, что получаете то, что хотели в первом запросе?

Declare @latitude varchar = '34.343';
Declare @decLatitude Decimal(9,6);
Set @decLatitude = CAST(@latitude AS Decimal(9,6));

Вы изучали, какое значение вы сохранили в обеих переменных?

select  @latitude, @decLatitude

Если вы не укажете размер для varchar, предполагается, что 1

Declare @latitude varchar = '34.343';

так что в основном вы назначаете 3 на @latitude и преобразование 3 в десятичное в порядке

Во втором запросе вы присваиваете '-' @latitude Таким образом, преобразование '-' в десятичное приведет к ошибке!

Таким образом, объявление varchar с размером будет работать во втором запросе

Declare @longitude varchar(10) = '-92.6424';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...