为啥在将 bigint 数插入 bigint 列时出现算术溢出错误?
Posted
技术标签:
【中文标题】为啥在将 bigint 数插入 bigint 列时出现算术溢出错误?【英文标题】:Why I'm getting arithmetic overflow error when inserting bigint number to a bigint column?为什么在将 bigint 数插入 bigint 列时出现算术溢出错误? 【发布时间】:2019-04-24 05:30:16 【问题描述】:我正在尝试在列中插入一个数字。列数据类型是 BIGINT,我很确定我的数字没有超过 BIGINT 的最大值,但我仍然得到 p>
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
【问题讨论】:
能否包含您运行的 SQL 以将列类型从INT
更改为 BIGINT
?事实上,这似乎是您现在所看到的可能的解释。
更改数据类型时,我只使用了设计器中 SQL 生成的脚本。这是一个很大的脚本,因为它有很多参考。
脚本删除所有约束,创建一个名为 tmp_Customer 的表(使用 BIGINT Cust_ID),然后将旧表中的所有数据插入到新表中
您的迁移脚本出了点问题,您需要弄清楚是什么问题。
你为什么不看看触发器,看看他们是否试图将 bigints 插入 int 字段。
【参考方案1】:
好的,我已经找到答案了。我的表有自定义约束,它们调用需要 INT 参数的标量函数。
将所有这些函数的参数更改为 BIGINT 即可解决问题。
【讨论】:
以上是关于为啥在将 bigint 数插入 bigint 列时出现算术溢出错误?的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 typeorm (NestJS) 在 SQL Server 中插入 bigint
SQL bigint 数据类型被 gettype() 视为字符串;功能。为啥?