我具有以下结构的映射表:
CREATE TABLE MappingTable
(
TableName SYSNAME,
SrcId BIGINT,
DstId BIGINT,
PRIMARY KEY (Name, SrcId),
UNIQUE (Name, DstId)
)
SrcId
和DstId
指的是2个相同数据库中的Identity
列,大多数列类型是INT
,但有些是BIGINT
,因此我正在将所有内容存储为BIGINT
。
现在,我想编写函数以获取DstId
和TableName
的{{1}}。
所以我的问题很简单:我有什么理由要实现2个功能,一个用于SrcId
,第二个用于INT
?
为了澄清:我读了我写的东西:写BIGINT
时,其读为INT
,而INT
则相同。
答案 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 |
+-----------+--------------------------------------------------------------------------+---------+