SQL 服务器在连接 3 个表时抛出算术错误
SQL Server is throwing arithmetic error when joining 3 tables
当我尝试连接 3 个系统表时,出现错误:
Arithmetic overflow error converting numeric to data type numeric
但如果我只想加入其中的 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;
如果您尝试在太少的空格中输入太多数字,则会抛出 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)
直到它适合 - 或者分析你的数据字段必须有多宽。
当我尝试连接 3 个系统表时,出现错误:
Arithmetic overflow error converting numeric to data type numeric
但如果我只想加入其中的 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;
如果您尝试在太少的空格中输入太多数字,则会抛出 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)
直到它适合 - 或者分析你的数据字段必须有多宽。