2013-04-15 74 views

回答

2

您有不適合在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; 
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)

相關問題