我使用BCP將大量數據導入包含所有字符串的SQL Server。爲了保持數據庫的完整性,我正在修改所有的列,以查找正確的元數據。十進制高精度和規模創建'算術溢出錯誤'
我有一個當前的字符串列,它實際上是十進制值,並且需要修改列以使其成爲十進制(p,s)。
由於數據量大,我寫了下面的查詢來獲取小數點前後字符串的最大長度;從小數前後添加字符串的長度以獲得精度。下面的查詢將展示我抵達:
SELECT
'('
+
CAST(MAX(LEN(LEFT(Measure, LEN(Measure) - LEN(SUBSTRING(Measure, CHARINDEX('.', Measure) , 255)))))
+
MAX(LEN(SUBSTRING(Measure, CHARINDEX('.', Measure) +1, 255))) AS varchar(5))
+
','
+ CAST(MAX(LEN(SUBSTRING(Measure, CHARINDEX('.', Measure) +1, 255))) AS varchar(5))
+
')' AS 'max[p,s]'
FROM
Result
以下是結果:
max[p,s]
--------
(24,19)
當我通過陳述變更列如下:
ALTER TABLE Result
ALTER COLUMN Measure DECIMAL (24,19)
我得到的以下錯誤:
Msg 8115, Level 16, State 8, Line 1 Arithmetic overflow error converting varchar to data type numeric. The statement has been terminated.
(p,s)其中p =精度和s =比例;我的印象是,我的最大精度(p)爲38,爲什麼會出現這個錯誤?有什麼建議麼?我必須不失去任何精度。
您確定在該列中沒有任何非數字值嗎? – APH
@APH –