将bigint数插入bigint列时为什么会出现算术溢出错误?

时间:2019-04-24 05:30:16

标签: sql sql-server sql-server-2014 sqldatatypes

我正在尝试在列中插入数字。列的数据类型为BIGINT,我很确定我的数字没有超过BIGINT的最大值,但仍然得到

Msg 8115, Level 16, State 2, Line 40
Arithmetic overflow error converting expression to data type int.
The statement has been terminated.

我最近的活动是将该列的数据类型从INT更改为BIGINT。我认为我内部的某列仍定义为INT。

这是我的剧本。

Insert into Customer(Cust_ID)
Select 2150000000

列Cust_ID数据类型在设计器中为BIGINT。它也是PRIMARY_KEY,很多表都引用它。

编辑: 这是一些迁移脚本

DROP TABLE dbo.Customer
GO
EXECUTE sp_rename N'dbo.Tmp_Customer', N'Customer', 'OBJECT' 
GO

2 个答案:

答案 0 :(得分:0)

由于尝试将2150000000插入Customer.Cust_ID中,您得到的错误不是

如果您尝试在bigint列中插入一个非常大的数字,则错误消息将如下所示:

Arithmetic overflow error converting expression to data type bigint.
The statement has been terminated.

您的错误消息中提到了data type int,而不是bigint

您没有显示完整的脚本。问题出在第40行某处。

答案 1 :(得分:0)

好的,我已经找到答案了。我的表具有自定义约束,这些约束调用需要INT参数的标量函数。

将所有这些函数的参数更改为BIGINT即可解决问题。