Sql-Server

SQL Server 中“將表達式轉換為數據類型 int”的算術溢出錯誤的可能原因是什麼

  • March 26, 2018

執行此命令時,出現 SQL 伺服器錯誤

‘將表達式轉換為數據類型 int 的算術溢出錯誤’。

SELECT sum(size) FROM [dbname]..sysfiles sf, [dbname]..sysfilegroups sfg WHERE sfg.groupname = 'PRIMARY' AND sf.groupid = sfg.groupid

因為文件大小小於 16TB,bigint所以不需要。我仍然嘗試執行 cast(size as bigint),錯誤仍然存在。

SELECT sum(cast(size as bigint)) FROM [dbname]..sysfiles sf, [dbname]..sysfilegroups sfg WHERE sfg.groupname = 'PRIMARY' AND sf.groupid = sfg.groupid

所以問題是,除了超過文件大小限制 16TB 之外,算術溢出錯誤的原因是什麼。

– 使用 DECIMAL(38,2) 進行轉換會拋出異常,需要將 Size 轉換為 bigint

選擇

$$ SizeInMB $$= CAST( ((SUM(Size)* 8) / 1024.0) AS DECIMAL(38,2) ) 來自 sys.master_files

– 此修復已足夠,但不能限制為 2 個十進制數字

選擇

$$ SizeInMB1 $$= ((SUM(CAST(Size AS BIGINT))* 8) / 1024.0) 來自 sys.master_files

– 2 位十進制數字在修復中不可用,因為除以 1024.0 會轉換為預設的 6 位數字

選擇

$$ SizeInMB2 $$= ((SUM(CAST(Size AS DECIMAL(38,2)))* 8) / 1024.0) 來自 sys.master_files

– 所以需要 2 次強制轉換來消除算術溢出異常並限制 2 位十進制數字

選擇

$$ SizeInMB3 $$= CAST( ((SUM(CAST(Size AS BIGINT))* 8) / 1024.0) AS DECIMAL(38,2) ) 來自 sys.master_files

引用自:https://dba.stackexchange.com/questions/184027