Ну, мне нравится MONEY! Это на байт дешевле чем DECIMAL, и вычисления выполняются быстрее, потому что (под прикрытием) операции сложения и вычитания по существу являются целочисленными операциями. Пример @ SQLMenace, который является отличным предупреждением для незнающих, может в равной степени быть применен к INTegers, где результат будет нулевым. Но это не причина не использовать целые числа - где это уместно .
Таким образом, это совершенно «безопасно» и уместно использовать, MONEYкогда вы имеете дело с тем, с чем вы имеете дело, MONEYи использовать его в соответствии с математическими правилами, которым оно следует (так же, как INTeger).
Было бы лучше, если бы SQL Server способствовал делению и умножению MONEYs на DECIMALs (или FLOATs?) - возможно, но они не решили делать это; и при этом они не решили продвигать INTегеров к FLOATs, разделяя их.
MONEYне имеет проблем с точностью; что DECIMALдобудет иметь больший промежуточный тип , используемый при расчетах просто «функция» с использованием этого типа (и я на самом деле не знаю , как далеко , что «функция» распространяется).
Чтобы ответить на конкретный вопрос, «веская причина»? Ну, если вы хотите абсолютную максимальную производительность вSUM(x) где xможет быть либо, DECIMALлибо MONEY, то MONEYбудет иметь преимущество.
Кроме того, не забывайте, что это двоюродный брат меньшего размера - SMALLMONEYвсего 4 байта, но он имеет максимальный размер 214,748.3647- который довольно мал для денег - и поэтому не всегда подходит.
Чтобы доказать смысл использования больших промежуточных типов, если вы явно присваиваете промежуточное значение переменной, DECIMAL возникает та же проблема:
declare @a decimal(19,4)
declare @b decimal(19,4)
declare @c decimal(19,4)
declare @d decimal(19,4)
select @a = 100, @b = 339, @c = 10000
set @d = @a/@b
set @d = @d*@c
select @d
Производит 2950.0000(хорошо, так по крайней мере DECIMALокруглено, а не MONEYусечено - так же, как целое число).
DECIMAL(19, 4)популярный выбор, проверьте это, также проверьте здесь Форматы Мировой валюты, чтобы решить, сколько десятичных знаков использовать, надеюсь, поможет.