2010-12-14 7 views
6

Tengo un problema con el desbordamiento aritmético al convertir a bigint en SQL Server 2008. Lo siguiente me confunde.Desbordamiento aritmético w/bigints en SQL Server 2008

Esto funciona:

select 58356453 * 228204732751 

Respuesta: 13317218761161292203

embargo, todos los intentos que implican la conversión explícita fallan.

select convert(bigint, 58356453 * 228204732751) 

resultado: desbordamiento aritmético

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

resultado: desbordamiento aritmético

Qué me estoy perdiendo aquí? También probé "cast (BigNumber as bigint)" (no creo que sea diferente de la conversión) y varias combinaciones de conversión antes/después de las operaciones aritméticas.

Y, esto es en Windows Server 2008 x64

+0

Probé select convert (BIGINT, 58356453) * convert (BIGINT, 228204732751) con el mismo error –

Respuesta

2

El valor maxiumum para un bigint es

9223372036854775807

usted está volviendo

13317218761161292203.

Sugiero colada a un decimal que tenga suficiente precisión.

+1

1 exactamente a la derecha. –

+0

+1 Brillante. SELECCIONAR (58356453 * 228204732751) - 9223372036854775807 = 4093846724306516396 – gbn

0

Debe usar el numeric datatype.

select cast(13317218761161292203 as numeric(38)) 
Cuestiones relacionadas