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

时间:2018-12-09 13:17:27

标签: sql-server function types

我具有以下结构的映射表​​:

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

SrcIdDstId指的是2个相同数据库中的Identity列,大多数列类型是INT,但有些是BIGINT,因此我正在将所有内容存储为BIGINT

现在,我想编写函数以获取DstIdTableName的{​​{1}}。

所以我的问题很简单:我有什么理由要实现2个功能,一个用于SrcId,第二个用于INT

为了澄清:我读了我写的东西:写BIGINT时,其读为INT,而INT则相同。

1 个答案:

答案 0 :(得分:5)

  

我是否有任何理由要实现2个功能,一个用于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