2010-10-20 3 views

Répondre

7

Une syntaxe plus simple:

SELECT [Name]  = o.name 
    ,  [RowCount] = SUM(p.row_count) 

FROM SYS.DM_DB_PARTITION_STATS p 

INNER JOIN 
     SYS.TABLES o 
    ON p.[object_ID] = o.[object_id] 

WHERE index_id <= 1 -- Heap or clustered index only 

GROUP BY o.name 

ORDER BY 2 desc 
3

Vous pouvez utiliser cette procédure stockée:

EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'" 

Cela renverra un pour chaque table de résultats dans la base de données (chacun indiquant le nom et le nombre de lignes, entre autres informations).

Voici comment vous pouvez les mettre dans une variable de table, et les commander par le nombre de lignes:

DECLARE @TBL TABLE (
    [name] nvarchar(500), 
    [rows] bigint, 
    [reserved] nvarchar(500), 
    [data] nvarchar(500), 
    [index_size] nvarchar(500), 
    [unused] nvarchar(500) 
) 

INSERT INTO @TBL 
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'" 

SELECT * FROM @TBL 
ORDER BY [rows] DESC 
22

Essayez ceci - vous donne le nom de la table et la ligne compte:

SELECT 
    t.NAME AS TableName, 
    SUM(p.rows) AS [RowCount] 
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 
WHERE 
    i.index_id <= 1 
GROUP BY 
    t.NAME, i.object_id, i.index_id, i.name 
ORDER BY 
    SUM(p.rows) DESC 

Affiche toutes les tables et leur nombre de lignes dans une seule sortie.

+0

Syntaxe incorrecte près du mot clé 'RowCount'. –

+0

Comment peut-il être restreint à certaines DB? Si j'ai sur le même serveur SQL plus de bases de données avec les mêmes noms de table, le nombre de lignes sera ajouté ensemble. –

+0

@OndraPeterka: non, ceci est toujours exécuté dans le contexte d'une ** base de données ** - et seules ces tables seront affichées. Cela ne ** montre ** pas toutes les tables de toutes les bases de données d'un serveur –

13

Comme votre question mentionne spécifiquement SSMS, vous pouvez également clic droit sur la base de données dans l'explorateur d'objets, puis dans le menu raccourci ne

Reports -> Standard Reports -> Disc Usage By Table 

Screenshot

+0

c'est super super utile –

+0

Meilleure réponse. Merci! – DonP

Questions connexes