З онлайнової документації :
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) <br> 28 жовтня 2016 18:17:30 <br> Авторські права (c) Microsoft Corporation - Express Edition (64-розрядні) на Windows Server 2012 р2 стандарт 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 Corporation - Express Edition (64-розрядна) для Windows NT 6.3 <X64> (збірка 9600:) (Гіпервізор) <br> |
SELECT POWER(2.,64.);
GO
| (Без назви стовпців) |
| : ------------------- |
| 18446744073709552000 |
dbfiddle тут