当我尝试加入3个系统表时,出现错误:
将数字转换为数据类型数字
的算术溢出错误
但是如果我试图只加入其中的两个,那就可以了。
为什么呢?
代码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;
答案 0 :(得分:2)
如果你试图在太少的空格中输入过多的数字,则抛出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)
直到它适合 - 或者分析您的数据字段的广度。