Папучино,
Не препоръчвам типовете money и smallmoney, освен ако не сте сигурни, че единствената аритметика, която планирате да направите, е събиране и изваждане. Ако може да имате работа с обменни курсове, проценти и т.н., рискувате реални проблеми с тези видове.
Ето само един малък пример, за да ви покажем разликата между използването на пари, десетичен знак и число с плаваща единица, когато има деление. Възможно е да се измислят примери, където разликата е много по-драматична.
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;
Резултат:0.0028 0.0029 0.00289855072463768
В зависимост от индустрията може да има насоки или разпоредби, които да ви помогнат да вземете решение за правилния тип данни. Няма един правилен отговор.
Добавени забележки:
Вие сте прави, че парите/парите не трябва да са пари, но SQL Server (необяснимо) произвежда точно този резултат:въведете пари от частното на две парични стойности. Това е фалшиво, но както виждате от примера по-долу, това е, което получавате, въпреки че няма смисъл:
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
Резултат:0.0028 0.0028985507246376811
Резултатът с тип пари, 0,0028, е с 3-4% по-малък от правилния резултат.
Разбира се, има много ситуации, в които трябва да разделите валутните стойности. Опасността от използването на типа пари е, че коефициентът е грешен тип (и отговорът не е достатъчно близък до правилния). Примери за въпроси, които изискват разделяне на валута:
Да предположим, че обменяте 320 юана и банката ви дава 47,3 щатски долара. Какъв е обменният курс, който ви беше даден?
Да предположим, че инвестирате $23 и година по-късно това струва $31. Какъв е вашият процент на възвръщаемост?
И двете изчисления изискват разделяне на валутни стойности.