Nun, ich mag MONEY! Es ist ein Byte billiger als DECIMALund 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 INTUnbewusste - 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, MONEYwenn es sich um das handelt, womit Sie es zu tun haben, MONEYund es gemäß den folgenden mathematischen Regeln zu verwenden (wie bei INTeger).
Wäre es besser gewesen, wenn SQL Server die Division und Multiplikation von MONEY's in DECIMALs (oder FLOATs?) Gefördert hätte - möglicherweise, aber sie haben sich nicht dafür entschieden; Sie haben sich auch nicht dafür entschieden, INTEger zu FLOATs zu befördern, wenn sie sie teilen.
MONEYhat kein Präzisionsproblem; Dass DECIMALein 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 xkönnte entweder DECIMALoder MONEY, dann MONEYwird die Nase vorn haben.
Vergessen Sie auch nicht, dass es ein kleinerer Cousin ist - SMALLMONEYnur 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 DECIMALdas 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 DECIMALgerundet anstatt MONEYabgeschnitten - 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.