Из онлайн-документации :
POWER ( float_expression , y )
аргументы
float_expression Выражение типа float или типа, которое можно неявно преобразовать в float.
Подразумевается, что все, что вы передадите в качестве первого параметра, будет неявно приведено к float(53)
перед выполнением функции. Однако это не (всегда?) Случай .
Если бы это было так, это объяснило бы потерю точности:
Преобразование значений с плавающей запятой, использующих научную запись, в десятичную или числовую форму ограничено значениями точности только 17 цифр. Любое значение с точностью выше 17 раундов до нуля.
С другой стороны, литерал 2.
типа numeric
...
DECLARE @foo sql_variant;
SELECT @foo = 2.;
SELECT SQL_VARIANT_PROPERTY(@foo, 'BaseType');
GO
| (Без названия столбца) |
| : --------------- |
| числовой |
dbfiddle здесь
… И оператор умножения возвращает тип данных аргумента с более высоким приоритетом .
Похоже, что в 2016 году (SP1) вся точность сохраняется:
SELECT @@version;
GO
| (Без названия столбца) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------- |
| Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) - 28 октября 2016 г. 18:17:30 <br> Авторское право (c) Корпорация Майкрософт, выпуск Express Edition (64-разрядная версия) на Windows Server 2012 R2 Standard 6.3 <X64> (сборка 9600:) (гипервизор) <br> |
SELECT POWER(2.,64.);
GO
| (Без названия столбца) |
| : ------------------- |
| 18446744073709551616 |
dbfiddle здесь
… Но в 2014 году (SP2) они не являются:
SELECT @@version;
GO
| (Без названия столбца) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------ |
| Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) <br> 17 июня 2016 г. 19:14:09 <br> Авторские права (c) Корпорация Microsoft, экспресс-выпуск (64-разрядная версия) в Windows NT 6.3 <X64> (сборка 9600:) (гипервизор) <br> |
SELECT POWER(2.,64.);
GO
| (Без названия столбца) |
| : ------------------- |
| 18446744073709552000 |
dbfiddle здесь