Диапазон / Точность
bigint
диапазон составляет от -9,223,372,036,854,775,808
до 9,223,372,036,854,775,807
money
диапазон составляет от -922,337,203,685,477.5808
до 922,337,203,685,477.5807
Хранение
Они оба занимают 8 байт памяти и хранятся в виде больших целых чисел, с той лишь разницей, что SQL Server понимает, что 4 самые правильные цифры идут после десятичной точки.
Если вы сделаете
declare @m money = 1.2345
declare @b bigint = 12345
select cast(@m as BINARY(8)), cast(@b as BINARY(8))
Вы видите, что хранилище одинаковое.
------------------ ------------------
0x0000000000003039 0x0000000000003039
Поведение
Однако тип данных money
не ведет себя точно так, как если бы вы просто использовали bigint
сам.Следует избегать вычислений с money
, но они все же более точны, чем аналогичное целочисленное деление.
declare @m money = 1.9999, @m2 money = 1
select @m/@m2 /*Returns 1.9999*/
declare @b bigint = 19999, @b2 bigint = 10000
select @b/@b2 /*Returns 1*/