Nun, ich mag MONEY
! Es ist ein Byte billiger als DECIMAL
und die Berechnungen werden schneller ausgeführt, da Additions- und Subtraktionsoperationen (unter dem Deckmantel) im Wesentlichen ganzzahlige Operationen sind. Das Beispiel von @ SQLMenace - eine großartige Warnung für INT
Unbewusste - könnte auch auf Eger angewendet werden, bei denen das Ergebnis Null wäre. Dies ist jedoch kein Grund, gegebenenfalls keine Ganzzahlen zu verwenden .
Es ist also absolut "sicher" und angemessen zu verwenden, MONEY
wenn es sich um das handelt, womit Sie es zu tun haben, MONEY
und es gemäß den folgenden mathematischen Regeln zu verwenden (wie bei INT
eger).
Wäre es besser gewesen, wenn SQL Server die Division und Multiplikation von MONEY
's in DECIMAL
s (oder FLOAT
s?) Gefördert hätte - möglicherweise, aber sie haben sich nicht dafür entschieden; Sie haben sich auch nicht dafür entschieden, INT
Eger zu FLOAT
s zu befördern, wenn sie sie teilen.
MONEY
hat kein Präzisionsproblem; Dass DECIMAL
ein größerer Zwischentyp bei Berechnungen verwendet wird, ist nur ein "Merkmal" der Verwendung dieses Typs (und ich bin mir nicht sicher, wie weit sich dieses "Merkmal" erstreckt).
Um die spezifische Frage zu beantworten, ein "zwingender Grund"? Nun, wenn Sie in eine absolute Höchstleistung wollen , SUM(x)
wo x
könnte entweder DECIMAL
oder MONEY
, dann MONEY
wird die Nase vorn haben.
Vergessen Sie auch nicht, dass es ein kleinerer Cousin ist - SMALLMONEY
nur 4 Bytes, aber es ist maximal 214,748.3647
- was für Geld ziemlich klein ist - und daher oft nicht gut passt.
Wenn Sie das Intermediate explizit einer Variablen zuweisen, tritt DECIMAL
das gleiche Problem auf, um die Verwendung größerer Zwischentypen zu beweisen :
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
Produziert 2950.0000
(okay, also zumindest DECIMAL
gerundet anstatt MONEY
abgeschnitten - genau wie eine ganze Zahl.)
DECIMAL(19, 4)
Dies ist eine beliebte Wahl. Überprüfen Sie dies auch hier. Weltwährungsformate, um zu entscheiden, wie viele Dezimalstellen verwendet werden sollen. Hoffnung hilft.