MSDN sagt über Präzision und Skalierung des Dezimal-Multiplikators Ergebnis :
- Die Ergebnisgenauigkeit und die Skalierung haben ein absolutes Maximum von 38. Wenn eine Ergebnisgenauigkeit größer als 38 ist, wird die entsprechende Skalierung reduziert, um zu verhindern, dass der ganzzahlige Teil eines Ergebnisses abgeschnitten wird.
Also wenn wir das ausführen:
%Vor%Das Ergebnis ist 1.12345689000000000 (9 Nullen) und wir sehen, dass es nicht abgeschnitten wird, weil 18 + 19 + 1 = 38 (obere Grenze).
Wenn wir die Genauigkeit von @a auf 27 erhöhen, verlieren wir alle Nullen und das Ergebnis ist nur 1.123456789. Wenn wir weitergehen, fahren wir mit dem Abschneiden fort und lassen das Ergebnis gerundet werden. Wenn Sie beispielsweise die Genauigkeit von @a auf 28 erhöhen, erhalten Sie 1.12345679 (8 Ziffern).
Das Interessante ist, dass wir irgendwann mit einer Genauigkeit von 30 den Wert 1.123457 haben und dieses Ergebnis wird sich nicht mehr ändern (es hört auf, abgeschnitten zu werden).
31, 32 und bis zu 38 ergibt dasselbe. Wie könnte das erklärt werden?
Dezimalzahlen und numerische Operationsergebnisse haben eine Mindestskala von 6 - dies ist in der Tabelle der msdn-Dokumentation für die Division angegeben, aber das gleiche Verhalten gilt auch für die Multiplikation, wenn die Verkürzung wie in Ihrem Beispiel erfolgt.
Dieses Verhalten wird im sqlprogrammability-Blog genauer beschrieben .
Tags und Links tsql