【发布时间】:2019-11-17 22:53:11
【问题描述】:
ALTER TABLE employee
ALTER COLUMN emp_phoneNo SMALLINT;
我正在尝试将数据类型从 BIGINT 更改为 SMALLINT 并显示此错误:
将表达式转换为数据类型 int 时出现算术溢出错误。
我无法理解出了什么问题。
【问题讨论】:
-
错误不明白怎么办?错误非常明显,
smallint与bigint的最大值/最小值非常大(-32,768到32,767与-9,223,372,036,854,775,808到9,223,372,036,854,775,807)。真的再清楚不过了。对于smallint,您的值太大/太小。 -
保持原样怎么样。
-
您必须像@Larnu 所说的那样考虑每种类型的大小。这听起来像是把乘客从一辆满载的公共汽车上载到一辆汽车上。但是,为了提供帮助,并考虑到相关值已经填充到 smallint 中,尝试创建一个新字段 smallint,执行 SQL 查询来更新此字段: update [table] set [new_smallint_field] = cast([bigint_field] as smallint ) 重要的!这可能会导致您的数据库出现完整性问题。祝你好运!
-
这意味着有一些记录大于 SMALLINT 的最大值。所以它会抛出 Arthimetic 溢出异常。请检查一次数据
-
感谢您的所有回复。我明白我的愚蠢错误。谢谢!!!
标签: sql-server