DECIMAL

тип DECIMAL[ (p [,s] ) ]
псевдоним NUMERIC[ (p [,s] ) ]
аналог в C# decimal
знак - +
диапазон от -10^38+1 до 10^38-1
размер в байтах DECIMAL(1-9) — 5 байт
DECIMAL(10-19) — 9 байт
DECIMAL(20-28) — 13 байт
DECIMAL(29-38) — 17 байт
p — общее количество знаков вместе с запятой
диапазон от 1 до 38
по умолчанию (DECIMAL без ничего) общее количество знаков = 18

s — количество цифр после запятой, указывается вместе с общим количеством знаков
по умолчанию, количество цифр после запятой = 0
В этом примере, вся дробная часть будет усечена, потому что по умолчанию, количество цифр после запятой = 0
Скрыть

Показать

Копировать
  Script.sql  
DECLARE @a DECIMAL = 12345.12345
PRINT @a 
 
12345
В этом примере, вся дробная часть будет усечена, всего знаков допускается 9, целая часть числа остается неизменной
Скрыть

Показать

Копировать
  Script.sql  
DECLARE @a DECIMAL(9) = 12345.12345
PRINT @a 
 
12345
В этом примере произойдет ошибка, так как произошло переполнение, допустимо всего 3 знака
Скрыть

Показать

Копировать
  Script.sql  
DECLARE @a DECIMAL(3) = 12345.12345
PRINT @a 
 
Сообщение 8115, уровень 16, состояние 8, строка 1
Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.
В этом примере произойдет округление до трех цифр после запятой
Скрыть

Показать

Копировать
  Script.sql  
DECLARE @a DECIMAL(20, 3) = 12345.12345
PRINT @a 
 
12345.123