Ну, мені подобається MONEY
! Це байт дешевше DECIMAL
, а обчислення виконуються швидше, оскільки (під кришками) операції додавання та віднімання по суті є цілими операціями. Приклад @ SQLMenace - який є чудовим попередженням для невідомих - може однаково застосовуватися і до INT
egers, де результат буде нульовим. Але це не є причиною не використовувати цілі числа - де це доречно .
Таким чином, це абсолютно "безпечно" і доцільно використовувати, MONEY
коли ви маєте справу з цим, MONEY
і використовувати його відповідно до математичних правил, які вони дотримуються (так само, як і INT
eger).
Було б краще, якби SQL Server сприяв поділу та множенню MONEY
s на DECIMAL
s (або FLOAT
s?) - можливо, але вони не вирішили цього робити; і вони не вирішили просувати INT
егер під FLOAT
час їх поділу.
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)
це популярний вибір, перевірте це, також перевірте тут Формати світової валюти, щоб визначити, скільки десяткових знаків використовувати, надію, допоможе.