2010-01-13 8 views
58

Ich habe einen Fehler SQL Server Management Studio geworfen zu werden, wenn dieser Code ausgeführt wird:Warum SQL Server Arithmetik-Überlauffehler beim Konvertieren von int in numerischen Datentyp auslöst?

declare @percentage numeric(3,2) 
set @percentage = cast(15 as numeric(3,2)) 

aber wenn ich numerische Erklärung

declare @percentage numeric(4,2) 
set @percentage = cast(15 as numeric(4,2)) 

geht alles in Ordnung zu ändern.

Gibt es eine Einschränkung für den numerischen Datentyp?

Antwort

109

Numerisch definiert die Gesamtzahl der Ziffern und dann die Zahl nach dem Komma.

Ein numerischer Wert (3,2) kann nur bis 9,99 betragen.

26

Lets sehen, numerisch (3,2). Das heißt, Sie haben 3 Stellen für Daten und zwei von ihnen sind rechts von der Dezimalstelle und lassen nur eine links von der Dezimalstelle. 15 hat zwei Stellen links von der Dezimalstelle. BTW, wenn Sie 100 als Wert haben, würde ich das zu numerischem erhöhen (5, 2)

16

NUMERIC(3,2) bedeutet: 3 Ziffern insgesamt, 2 nach dem Dezimalpunkt. Sie haben also nur eine Dezimalstelle vor dem Komma.

Versuchen Sie NUMERIC(5,2) - drei vor, zwei nach dem Komma.

14

Präzision und Maßstab werden oft missverstanden. In numerischer (3,2) möchten Sie insgesamt 3 Ziffern, aber 2 rechts von der Dezimalstelle. Wenn Sie 15 => 15.00 wollen, verursacht die führende 1 den Überlauf (denn wenn Sie 2 Ziffern rechts von der Dezimalzahl haben wollen, gibt es nur einen Platz auf der linken Seite für eine weitere Ziffer). Mit 4,2 ist das kein Problem, da alle 4 Ziffern passen.

Verwandte Themen