試圖做一些相當平凡的事情(將數字(19,16)類型的列轉換爲數字(19,19),但不斷獲取算術溢出錯誤算術溢出將數字(19,16)轉換爲數據類型數字(19,19)
ALTER TABLE X
ALTER COLUMN Column1 numeric(19,19)
任何想法
試圖做一些相當平凡的事情(將數字(19,16)類型的列轉換爲數字(19,19),但不斷獲取算術溢出錯誤算術溢出將數字(19,16)轉換爲數據類型數字(19,19)
ALTER TABLE X
ALTER COLUMN Column1 numeric(19,19)
任何想法
您有不適合在numeric(19,19)
數據 - ?你想怎麼「修理」這是給你 - 但你需要檢討數據不合適並決定如何處理它
如果所有的數據都符合,它會正常運行:
create table X (Column1 numeric(19,16))
create table Y (Column1 numeric(19,16))
insert into X(Column1) values (0.1)
insert into Y(Column1) values (1.0)
這工作:
ALTER TABLE X
ALTER COLUMN Column1 numeric(19,19)
這將產生錯誤:
ALTER TABLE Y
ALTER COLUMN Column1 numeric(19,19)
因爲你不能把一個號碼與任何整數部分爲numeric(19,19)
。
如果你想找到不適合的改變列定義的值,運行這個第一:
SELECT * FROM X where ABS(Column1) >= 1.0;
NUMERIC(19,19)意味着你有19位,其中有19所有背後小數點 - 因此,您可以存儲的最大數字是0.9999999999999999999(19.9秒之後)。
因此,如果在您的NUMERIC(19,16)列中有任何大於或等於1的值 - 將會失敗將其轉換爲(19,19)。
NUMERIC(19,16)可以存儲小數點左側的三位數字和其後面的16位數字 - 製作999.9999999999999999最大可能數量。
在exapmle,這將工作:
DECLARE @a NUMERIC(19,16)
SET @a = 0.123456789
SELECT CAST (@a AS NUMERIC(19,19))
,這將不是:
DECLARE @b NUMERIC(19,16)
SET @b = 123.123456789
SELECT CAST (@b AS NUMERIC(19,19))
也沒有這樣的:
SELECT CAST (1 AS NUMERIC(19,19))
編輯:Damien_The_Unbeliever發佈了一個不錯的選擇,以檢查對於不適合(19,19)的行,如果您真的想轉換爲NUMERIC(19,1),那麼應該使用它 - 但是,我的猜測你真的不想轉換爲(19,19),而是保留你的數據,只需要添加3位精度 - 這是NUMERIC(22,19)
你使用的是什麼RDBMS? –