2010-12-14 10 views
6

Sto riscontrando un problema con l'overflow aritmetico durante la conversione in bigint in SQL Server 2008. Quanto segue mi confonde.Overflow aritmetico w/bigints in SQL Server 2008

Questo funziona:

select 58356453 * 228204732751 

Risposta: 13317218761161292203

Ma, tutti gli altri tentativi che coinvolgono conversione esplicita fallire.

select convert(bigint, 58356453 * 228204732751) 

risultato: overflow aritmetico

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

risultato: overflow aritmetico

Che cosa mi manca qui? Ho anche provato "cast (BigNumber come bigint)" (non penso che sia diverso dalla conversione) e varie combinazioni di conversione prima/dopo operazioni aritmetiche.

E, questo è su Windows Server 2008 x64

+0

Ho provato select convert (bigint, 58.356.453) * convert (bigint, 228.204.732.751) con lo stesso errore –

risposta

2

Il valore maxiumum per un bigint è

9223372036854775807

stai tornando

13317218761161292203.

suggerisco di fusione a un decimale che ha abbastanza precisione.

+1

+1 proprio. –

+0

+1 brillante. SELEZIONA (58356453 * 228204732751) - 9223372036854775807 = 4093846724306516396 – gbn

0

È necessario utilizzare numeric datatype.

select cast(13317218761161292203 as numeric(38)) 
Problemi correlati