Bene, mi piace MONEY
! È un byte più economico di DECIMAL
, e i calcoli eseguono più velocemente perché (sotto le copertine) le operazioni di addizione e sottrazione sono essenzialmente operazioni intere. L'esempio di @ SQLMenace — che è un grande avvertimento per gli ignari — potrebbe essere applicato ugualmente agli INT
egers, dove il risultato sarebbe zero. Ma questo non è un motivo per non usare numeri interi, dove appropriato .
Quindi, è perfettamente 'sicuro' e appropriato da usare MONEY
quando è quello che stai trattando MONEY
e usarlo secondo le regole matematiche che segue (lo stesso di INT
eger).
Sarebbe stato meglio se SQL Server avesse promosso la divisione e la moltiplicazione di MONEY
's in DECIMAL
s (o FLOAT
s?) - possibilmente, ma non hanno scelto di farlo; né hanno scelto di promuovere INT
egers FLOAT
quando li dividono.
MONEY
non ha problemi di precisione; che DECIMAL
s arrivare ad avere un tipo intermedio più grande utilizzato durante i calcoli è solo una 'possibilità' di utilizzare questo tipo (e non sono realmente sicuro quanto lontano che 'possibilità' si estende).
Per rispondere alla domanda specifica, un "motivo convincente"? Bene, se vuoi la massima performance assoluta in un SUM(x)
dove x
potrebbe essere uno DECIMAL
o MONEY
, allora MONEY
avrai un vantaggio.
Inoltre, non dimenticare che è un cugino più piccolo, SMALLMONEY
solo 4 byte, ma raggiunge il limite massimo, 214,748.3647
che è piuttosto piccolo per soldi, e quindi spesso non è adatto.
Per provare il punto attorno all'utilizzo di tipi intermedi più grandi, se si assegna l'intermedio in modo esplicito a una variabile, si verifica DECIMAL
lo stesso problema:
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
Produce 2950.0000
(va bene, quindi almeno DECIMAL
arrotondato anziché MONEY
troncato, come farebbe un numero intero).
DECIMAL(19, 4)
è una scelta popolare controlla questo controlla anche qui i formati di valuta del mondo per decidere quanti posti decimali usare, la speranza aiuta.