【问题标题】:Can __int64 be stored in sql server Int if value is within __int32 bounds?如果值在 __int32 范围内,可以将 __int64 存储在 sql server Int 中吗?
【发布时间】:2014-01-16 10:31:13
【问题描述】:

我想知道是否有人知道将 64 位 long long 或 __int64(或 x64 配置下的 ptrdiff_t)存储到 SQL 服务器 INT 数据类型中是否安全 _鉴于我要存储在数据库中的值首先被检查为例如在 INT32_MIN 和 INT32_MAX_ 之间?

SQL Server 是否会通过切断 MSB 来简单地截断 __int64 数据类型,或者它实际上会先转换为 INT 数据类型,然后再存储它。因为如果它只是削减值,那么对于负 __int64 值将是不利的。

感谢您的帮助!

【问题讨论】:

    标签: sql sql-server 64-bit type-conversion


    【解决方案1】:

    如果您的数字对于 SQL int 数据类型而言太大,您将收到“算术溢出”错误。如果数字适合 int 数据类型的存储范围,则 SQL 将执行隐式转换。可以使用下面的代码来测试一下...

    declare @num int
    declare @bignum bigint
    
    set @bignum = cast(POWER(2,30) as bigint)*2-1
    -- First assignment, doesn't error
    set @num = @bignum
    
    select @bignum, @num
    
    set @bignum += 1
    
    -- Second assignment, does error
    set @num = @bignum
    select @bignum, @num
    

    第一个作业完美运行。第二个错误。

    【讨论】:

    • 谢谢,尤其是代码示例! :) 很好,它似乎实际上进行了隐式转换,而不仅仅是截断位。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 2022-01-23
    • 2017-03-23
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多