Ошибка арифметического переполнения при преобразовании varchar в тип данных numeric — SQL Server

#html #decimal #overflow #numeric

#HTML #десятичный #переполнение #числовой

Вопрос:

У меня есть столбец с типом numeric(18,3) данных. Пользователь также может вводить десятичные числа. Я установил максимальную длину этого текстового поля равной 18, но когда я набираю 77777777777777777777, я получаю эту ошибку

Ошибка арифметического переполнения при преобразовании varchar в тип данных numeric

Может кто-нибудь объяснить мне, почему я получаю эту ошибку?

Комментарии:

1. Пожалуйста, укажите фактический код SQL, который вызвал эту ошибку.

2. Потому numeric(18,3) что означает: всего 18 цифр , из них 3 после десятичной точки — таким образом, вы получаете только 15 цифр до десятичной точки. Ввод 18 цифр (до десятичной запятой), очевидно, приведет к переполнению! Если вам действительно нужны 18 цифр до десятичной запятой, вам нужно определить свой столбец как numeric(21,3) …. — прочитайте потрясающие документы

3. @TimBiegeleisen ИЗМЕНИТЬ ИМЯ ТАБЛИЦЫ ИЗМЕНИТЬ минимальное значение СТОЛБЦА числовое (18,3)

Ответ №1:

Потому numeric(18,3) что означает: всего 18 цифр, из них 3 после десятичной точки — таким образом, вы получаете только 15 цифр до десятичной точки.

Ввод 18 цифр (до десятичной запятой), очевидно, приведет к переполнению!

Если вам действительно нужно 18 цифр до десятичной запятой, вам нужно определить свой столбец как numeric(21,3)

 ALTER TABLE dbo.TableName 
    ALTER COLUMN MinimumValue NUMERIC(21, 3)
 

Для получения более подробной информации ознакомьтесь с потрясающими документами

Комментарии:

1. Или я могу добавить атрибут maxlength и установить его равным 15, чтобы он не позволял пользователю вводить больше, чем это? @marc_s