Aus der Online-Dokumentation :
POWER ( float_expression , y )
Argumente
float_expression Ist ein Ausdruck vom Typ float oder von einem Typ , der implizit in float konvertiert werden kann
Die Implikation ist, dass alles, was Sie als ersten Parameter übergeben, implizit in a umgewandelt wird, float(53)
bevor die Funktion ausgeführt wird. Dies ist jedoch nicht (immer?) Der Fall .
Wenn dies der Fall wäre, würde dies den Präzisionsverlust erklären:
Die Konvertierung von Float-Werten in Dezimalzahlen oder Zahlen mit wissenschaftlicher Schreibweise ist auf Werte mit einer Genauigkeit von nur 17 Stellen beschränkt. Jeder Wert mit einer Genauigkeit von mehr als 17 Runden auf Null.
Auf der anderen Seite ist das Literal 2.
Typ numeric
…:
DECLARE @foo sql_variant;
SELECT @foo = 2.;
SELECT SQL_VARIANT_PROPERTY(@foo, 'BaseType');
GO
| (Kein Spaltenname) |
| : --------------- |
| numerisch |
dbfiddle hier
… Und der Multiplikationsoperator gibt den Datentyp des Arguments mit der höheren Priorität zurück .
Es scheint, dass im Jahr 2016 (SP1) die gesamte Präzision erhalten bleibt:
SELECT @@version;
GO
| (Kein Spaltenname) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------- |
| Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) - 28. Oktober 2016, 18:17:30 Uhr <br> Copyright (c) Microsoft Corporation Express Edition (64-Bit) unter Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600:) (Hypervisor) <br> |
SELECT POWER(2.,64.);
GO
| (Kein Spaltenname) |
| : ------------------- |
| 18446744073709551616 |
dbfiddle hier
… Aber im Jahr 2014 (SP2) sind sie nicht:
SELECT @@version;
GO
| (Kein Spaltenname) |
| : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------ |
| Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) - 17. Juni 2016, 19:14:09 Uhr <br> Copyright (c) Microsoft Corporation Express Edition (64-Bit) unter Windows NT 6.3 <X64> (Build 9600:) (Hypervisor) <br> |
SELECT POWER(2.,64.);
GO
| (Kein Spaltenname) |
| : ------------------- |
| 18446744073709552000 |
dbfiddle hier