2010-12-14 6 views
6

Ich habe ein Problem mit arithmetischen Überlauf bei der Konvertierung in bigint in SQL Server 2008. Das folgende ist verwirrend mich.Arithmetische Überlauf w/bigints in SQL Server 2008

Dies funktioniert:

select 58356453 * 228204732751 

Antwort: 13317218761161292203

Aber alle anderen Versuche, die explizite Konvertierung beinhalten scheitern.

select convert(bigint, 58356453 * 228204732751) 

Ergebnis: arithmetischer Überlauf

begin 
    declare @key bigint = 58356453, 
     @workingVal bigint, 
     @primeMultiplier1 bigint = 228204732751; 
    set @workingVal = @key * @primeMultiplier1; 
end; 

Ergebnis: arithmetischer Überlauf

Was ich hier fehlt? Ich habe auch "cast (BigNumber as bigint)" ausprobiert (glaube nicht, dass es anders ist als convert), und verschiedene Kombinationen von Konvertierungen vor/nach arithmetischen Operationen.

Und das ist auf Windows Server 2008 x64

+0

Ich versuchte select convert (bigint, 58.356.453) * convert (bigint, 228.204.732.751) mit dem gleichen Fehler –

Antwort

2

Der maxiumum Wert für einen bigint ist

9223372036854775807

Sie Rückkehr

13317218761161292203.

I Casting vorschlagen zu einer Dezimalzahl, die genug Genauigkeit hat.

+1

+1 genau richtig. –

+0

+1 Brilliant. WÄHLEN (58356453 * 228204732751) - 9223372036854775807 = 4093846724306516396 – gbn

0

Sie sollten die numeric datatype verwenden.

select cast(13317218761161292203 as numeric(38))