【问题标题】:SQL Server is throwing arithmetic error when joining 3 tables连接 3 个表时 SQL Server 抛出算术错误
【发布时间】:2018-02-01 14:40:50
【问题描述】:

当我尝试加入 3 个系统表时,出现错误:

将数字转换为数据类型数字的算术溢出错误

但如果我只尝试加入其中的 2 个,则效果很好。

为什么?

代码1:(不起作用)

SELECT 
    database_id = (D.database_id),
    last_user_lookup = MAX(U.last_user_seek),
    last_user_update = MAX(U.last_user_seek),
    total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2)),
    create_date = MAX(D.create_date)
FROM 
    sys.databases D
JOIN 
    sys.dm_db_index_usage_stats U ON (D.database_id = U.database_id)
JOIN 
    sys.master_files F ON (D.database_id = F.database_id)
GROUP BY 
    D.database_id;

代码2:(确实有效)

SELECT 
    database_id = (D.database_id),
    -- last_user_lookup = MAX(U.last_user_seek),
    -- last_user_update = MAX(U.last_user_seek),
    total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2)),
    create_date = MAX(D.create_date)
FROM 
    sys.databases D
-- JOIN 
--    sys.dm_db_index_usage_stats U ON (D.database_id = U.database_id)
JOIN 
    sys.master_files F ON (D.database_id = F.database_id)
GROUP BY 
    D.database_id;

代码 3:(也可以)

SELECT 
    database_id = (D.database_id),
    last_user_lookup = MAX(U.last_user_seek),
    last_user_update = MAX(U.last_user_seek),
    -- total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2)),
    create_date = MAX(D.create_date)
FROM 
    sys.databases D
JOIN 
    sys.dm_db_index_usage_stats U ON (D.database_id = U.database_id)
-- JOIN 
--     sys.master_files F ON (D.database_id = F.database_id)
GROUP BY D.database_id;

【问题讨论】:

  • 先回答,然后搜索SO给你。您可能想重新访问 how to ask 。第一行是这样的:搜索和研究 ...并跟踪您找到的内容。即使您在网站的其他地方没有找到有用的答案,包括指向没有帮助的相关问题的链接也可以帮助其他人了解您的问题与其他问题有何不同 - 问题是您的确切错误消息.

标签: sql-server sql-server-2005


【解决方案1】:

如果您尝试在太少的空格中输入太多数字,则会抛出 arithmetic overflow error converting numeric to data type numeric

您有 8 位数字和 2 位小数:xxxxxx.xx

对于 2 个表,total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2)). 之前不超过 6 个位置 - 对于 3 个表,总和确实超过了这个值,不能再放入其中。

将其增加到 DECIMAL(9,2) 然后 DECIMAL(10,2) 然后 DECIMAL(11,2) 直到它适合 - 或分析您的数据该字段必须有多广泛。

【讨论】:

  • 谢谢。现在我注意到加入另一个表会改变数字。 :-(
猜你喜欢
  • 1970-01-01
  • 2017-04-15
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
相关资源
最近更新 更多