Sql server SQL Server:在BIGINT列中存储INT可能会有问题吗?
我有以下结构的映射表:Sql server SQL Server:在BIGINT列中存储INT可能会有问题吗?,sql-server,function,types,Sql Server,Function,Types,我有以下结构的映射表: CREATE TABLE MappingTable ( TableName SYSNAME, SrcId BIGINT, DstId BIGINT, PRIMARY KEY (Name, SrcId), UNIQUE (Name, DstId) ) SrcId和DstId是指两个相同数据库中的标识列,大多数列类型是INT,但有些是BIGINT,因此我将所有列存储为BIGINT 现在我想写一个函数来获取TableName和SrcI
CREATE TABLE MappingTable
(
TableName SYSNAME,
SrcId BIGINT,
DstId BIGINT,
PRIMARY KEY (Name, SrcId),
UNIQUE (Name, DstId)
)
SrcId和DstId是指两个相同数据库中的标识列,大多数列类型是INT,但有些是BIGINT,因此我将所有列存储为BIGINT
现在我想写一个函数来获取TableName和SrcId的DstId
所以我的问题很简单:我有什么理由实现两个函数,一个用于INT,另一个用于BIGINT
澄清一下:我读了我写的东西:当一个INT被写时,它读作INT,BIGINT也是如此
我是否有理由实现两个函数,一个用于INT,另一个用于BIGINT
答案很简单不,你只需要一个BIGINT函数,
例如:
这里有一个函数来说明这一点
看
我是否有理由实现两个函数,一个用于INT,另一个用于BIGINT
答案很简单不,你只需要一个BIGINT函数,
例如:
这里有一个函数来说明这一点
见@Sami谢谢,我只是想确定……你不能做相反的事。这不完全是真的。您可以将bigint的值分配给int,前提是bigint的值不超过int的最大/最小值。例如。声明@bi bigint=1,@i int;设置@i=@bi;将运行良好。BigInt使用的存储空间是int的两倍,但由于存储空间现在非常便宜,我看不出有任何理由在这里使用两个映射表而不是一个。@Sami谢谢,我只是想确定……你不能做相反的事。这不完全是真的。您可以将bigint的值分配给int,前提是bigint的值不超过int的最大/最小值。例如。声明@bi bigint=1,@i int;设置@i=@bi;BigInt使用的存储空间是int的两倍,但由于目前存储空间非常便宜,我认为没有理由使用两个映射表而不是一个映射表。
DECLARE @BigInt BIGINT = 922337203685477580;
DECLARE @Int INT = 2147483647;
--SET @Int = @BigInt; this wont work, so your choice is BIGINT
SET @BigInt = @Int;
+-----------+--------------------------------------------------------------------------+---------+
| 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 |
+-----------+--------------------------------------------------------------------------+---------+