更改SQL Server 2014中现有十进制列的精度会导致错误

时间:2015-08-20 15:51:09

标签: sql-server-2012

我在几个表中有几个十进制列,我需要从decimal(9, 4)扩展到decimal(9, 5)。不幸的是,每次尝试我都会遇到以下错误。到目前为止,我已尝试使用SQL Server Management Studio中的设计更改它并运行查询:

alter table xxx 
alter column xxx decimal (9,5) not null

错误是一样的:

  

Msg 8115,Level 16,State 8,Line 1
  算术溢出错误将数字转换为数据类型数字。

这些是在大量存储过程和应用程序中使用的大型重要表,因此我想避免添加新列并复制数据。每个表有250K到500K行。

任何想法都将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:6)

这是因为您在更改数据类型时减少了有效位数。如果您有任何值为100,000或更大的行,则它将不适合新大小。如果要增加小数位数(比例),还需要将精度提高1。

alter table xxx alter COLUMN xxx decimal (10,5) not null

请注意,这会将每行的存储要求增加4个字节。存储要求将从5个字节增加到9个字节。

https://msdn.microsoft.com/en-us/library/ms187746.aspx