算术溢出与SQL Server 2008中的bigints

use*_*516 6 sql-server sql-server-2008

我在SQL Server 2008中转换为bigint时出现算术溢出问题.以下令我困惑.

这有效:

select 58356453 * 228204732751
Run Code Online (Sandbox Code Playgroud)

答案:13317218761161292203

但是,涉及显式转换的所有其他尝试都会失败.

select convert(bigint, 58356453 * 228204732751)
Run Code Online (Sandbox Code Playgroud)

结果:算术溢出

begin 
    declare @key bigint = 58356453,
        @workingVal bigint,
        @primeMultiplier1 bigint = 228204732751;
    set @workingVal = @key * @primeMultiplier1;
end;
Run Code Online (Sandbox Code Playgroud)

结果:算术溢出

我在这里错过了什么?我也试过"cast(BigNumber as bigint)"(不认为它与转换有任何不同),以及算术运算之前/之后的各种转换组合.

而且,这是在Windows Server 2008 x64上

Mik*_* M. 2

bigint 的最大值是

9223372036854775807

你回来了

13317218761161292203。

我建议转换为具有足够精度的小数。