cor*_*ing 5 sql-server database-size type-conversion cast
运行此命令时,出现 SQL 服务器错误
“将表达式转换为数据类型 int 时出现算术溢出错误”。
SELECT sum(size) FROM [dbname]..sysfiles sf, [dbname]..sysfilegroups sfg WHERE sfg.groupname = 'PRIMARY' AND sf.groupid = sfg.groupid
Run Code Online (Sandbox Code Playgroud)
因为文件大小小于 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
Run Code Online (Sandbox Code Playgroud)
那么问题来了,除了超过16TB的文件大小限制之外,出现算术溢出错误的原因是什么?
-- 使用 DECIMAL(38,2) 进行转换抛出异常,Size 需要转换为 bigint
从 sys.master_files 选择 [SizeInMB] = CAST( ((SUM(Size)* 8) / 1024.0) AS DECIMAL(38,2) )
-- 此修复已足够,但不能限制为 2 个十进制数字
从 sys.master_files 中选择 [SizeInMB1] = ((SUM(CAST(Size AS BIGINT))* 8) / 1024.0)
-- 2 位十进制数字在修复中不可用,因为除以 1024.0 转换为默认的 6 位数字
从 sys.master_files 中选择 [SizeInMB2] = ((SUM(CAST(Size AS DECIMAL(38,2)))* 8) / 1024.0)
-- 所以需要 2 次强制转换来消除算术溢出异常并限制 2 个十进制数字
从 sys.master_files 中选择 [SizeInMB3] = CAST( ((SUM(CAST(Size AS BIGINT))* 8) / 1024.0) AS DECIMAL(38,2))
归档时间: |
|
查看次数: |
6147 次 |
最近记录: |