When I'm trying to join 3 system tables, I get an error:
Arithmetic overflow error converting numeric to data type numeric
But if I'm trying to join only 2 of them, it works fine.
Why?
Code 1: (doesn't work)
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;
Code 2: (does work)
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;
Code 3: (also works)
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;