代码之家  ›  专栏  ›  技术社区  ›  SHR

SQL Server:在BIGINT列中存储INT可能会有问题吗?

  •  1
  • SHR  · 技术社区  · 7 年前

    CREATE TABLE MappingTable 
    (
        TableName SYSNAME,
        SrcId BIGINT,
        DstId BIGINT,
        PRIMARY KEY (Name, SrcId),
        UNIQUE (Name, DstId)
    )
    

    SrcId 和 DstId Identity INT 但有些是 BIGINT ,因此我将所有存储为 .

    现在我想写一个函数来获取 DstId 对于 TableName 和 SrcId

    所以我的问题很简单:我有什么理由实现两个函数,一个用于 比基特 ?

    澄清一下:我读了我写的东西:当 国际的 写的是 国际的 ,同样适用于 .

    1 回复  |  直到 7 年前
        1
  •  5
  •   Ilyes    7 年前

    我是否有理由实现两个函数,一个用于INT,另一个用于BIGINT?

    这个问题的简单答案是不,你只需要一个函数 BIGINT ,

    DECLARE @BigInt BIGINT = 922337203685477580;
    DECLARE @Int INT = 2147483647;
    
    --SET @Int = @BigInt; this wont work, so your choice is BIGINT
    SET @BigInt = @Int;
    

    这里有一个 test 具有使其非常清晰的功能。


    +-----------+--------------------------------------------------------------------------+---------+
    | Data type |                                  Range                                   | Storage |
    +-----------+--------------------------------------------------------------------------+---------+
    | bigint    | -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) | 8 Bytes |
    | int       | -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647)                         | 4 Bytes |
    +-----------+--------------------------------------------------------------------------+---------+
    

    看见 int, bigint, smallint, and tinyint