SQL сервер целое число против десятичной суммы - PullRequest
3 голосов
/ 16 ноября 2011

Это, вероятно, новый вопрос, но ... Я работал над БД в SQSH, и он имел большие значения целочисленного типа (атрибут населения).Когда я хотел суммировать их, я получил исключение арифметического переполнения.Затем я преобразовал значения в десятичную, и все работало нормально (без переполнения).Однако везде, где я читаю, говорится, что Integer и Decimal - это одно и то же.Так почему это происходит?

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 16 ноября 2011

Целочисленный тип - это 4-байтовое число, которое может достигать 2 147 483 647. Десятичная дробь может пойти существенно выше. Оба хранятся в виде целых чисел, но десятичное число позволяет значению представлять цифры после десятичного знака. Вы также можете использовать BIGINT (9,223,372,036,854,775,807) вместо целого числа.

3 голосов
/ 16 ноября 2011

У вас есть тип данных decimal с точностью и масштабом, превышающими максимальный предел для типа данных int.Например, decimal(18, 0) будет иметь большую емкость, чем int (что составляет 2147483647).

Конечно, int занимает всего 4 байта, и вы не можете уйти с большимпотребление пространства с чем-то вроде decimal(18, 0).Но вы получите максимальный предел int.

2 голосов
/ 16 ноября 2011

из книг OnLine

десятичное и числовое

десятичные [(p [, s])] и числовые [(p [, s])] Фиксированная точность и шкала чисел. Когда используется максимальная точность, допустимые значения от - С 10 ^ 38 +1 до 10 ^ 38 - 1.

int, bigint, smallint и tinyint

Имеет длину 4 байта и хранит числа от -2 147 483 648. до 2 147 483 647

Итак, Decimal может хранить гораздо большее значение, чем Int.

...