Sql-Server
SQL Server 中“將表達式轉換為數據類型 int”的算術溢出錯誤的可能原因是什麼
執行此命令時,出現 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 asbigint
),錯誤仍然存在。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