Bonjour,

j'aimerais connaitre la taille des tables dans une base de données.

J'ai trouvé 2 requêtes qui donne le résultat:
- une avec la table sys.indexes, et spt_values
- l'autre avec la table sys.allocation_units

les voici:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM sys.tables t
INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255
GROUP BY t.Name, s.Name, p.Rows
ORDER BY UsedSpaceKB DESC
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
select 
TableName = convert(varchar(100),sysobjects.name)
    ,TotalRows = max(sysindexes.rows)
    ,MbData = (sum(convert(real,sysindexes.dpages)) * spt_values.low / 1048576)
    ,MbTotal = (sum(convert(real,sysindexes.used)) * spt_values.low / 1048576 )
from sysobjects 
join sysindexes on sysobjects.id = sysindexes.id
    join master.dbo.spt_values spt_values on spt_values.number = 1 and spt_values.type = 'E'
where sysobjects.type = 'U'
 
group by sysobjects.name, spt_values.low
order by 4 desc
le résultat n'est pas le même, laquelle donne le résultat le plus cohérent ?

Merci,

Teddy