Papuccino,
Non consiglio i tipi money e smallmoney a meno che tu non sia certo che l'unica aritmetica che intendi fare sia addizione e sottrazione. Se hai a che fare con tassi di cambio, percentuali e così via, rischi seri problemi con questi tipi.
Ecco solo un piccolo esempio per mostrarti la differenza tra l'uso di denaro, decimale e float quando è coinvolta la divisione. È possibile trovare esempi in cui la differenza è molto più drammatica.
declare @m1 money, @m2 money, @m3 money
declare @d1 decimal(19,4), @d2 decimal(19,4), @d3 decimal(19,4)
declare @f1 float, @f2 float, @f3 float;
set @m1 = 1.00;
set @m2 = 345.00;
set @m3 = @m1/@m2;
set @d1 = 1.00;
set @d2 = 345.00;
set @d3 = @d1/@d2;
set @f1 = 1.00;
set @f2 = 345.00;
set @f3 = @f1/@f2;
select @m3, @d3, @f3;
Risultato:0,0028 0,0029 0,00289855072463768
A seconda del settore, potrebbero esserci linee guida o normative per aiutarti a decidere il giusto tipo di dati. Non c'è una risposta giusta.
Osservazioni aggiunte:
Hai ragione sul fatto che denaro/denaro non dovrebbe essere denaro, ma SQL Server (inspiegabilmente) produce esattamente quel risultato:digita denaro dal quoziente di due valori monetari. Questo è falso, ma come vedi dall'esempio qui sotto, è quello che ottieni, anche se non ha senso:
declare @m1 money, @m2 money;
declare @d1 decimal(19,4), @d2 decimal(19,4);
set @m1 = 1.00;
set @m2 = 345.00;
set @d1 = 1.00;
set @d2 = 345.00;
select @m1/@m2, @d1/@d2
Risultato:0,0028 0,0028985507246376811
Il risultato con il tipo money, 0,0028, è del 3-4% in meno rispetto al risultato corretto.
Naturalmente, ci sono molte situazioni in cui è necessario dividere i valori delle valute. Il pericolo di utilizzare il tipo di denaro è che il quoziente è del tipo sbagliato (e una risposta non abbastanza vicina a quella corretta). Esempi di domande che richiedono la divisione della valuta:
Supponiamo di scambiare 320 Yuan e la banca ti dia 47,3 dollari USA. Qual è il tasso di cambio che ti è stato assegnato?
Supponiamo di investire $ 23 e un anno dopo valga $ 31. Qual è il tuo tasso di rendimento percentuale?
Entrambi questi calcoli richiedono la divisione dei valori di valuta.