web-dev-qa-db-fra.com

MS SQL 2008 - récupère tous les noms de table et leur nombre de lignes dans une base de données

J'essaie d'identifier quelles tables sont affectées par une mise à jour de données via une application (développée par d'autres). Il y a plus de 200 tables dans la base de données et j'aimerais éviter de vérifier chacune d'elles pour y rechercher des modifications.

Existe-t-il un autre moyen de répertorier tous les noms de table avec le nombre de lignes?

select table_name from information_schema.tables

Répertorie toutes les tables de mon achat de base de données. Comment puis-je également inclure le nombre de lignes?

37
chinna_82
SELECT sc.name +'.'+ ta.name TableName
 ,SUM(pa.rows) RowCnt
 FROM sys.tables ta
 INNER JOIN sys.partitions pa
 ON pa.OBJECT_ID = ta.OBJECT_ID
 INNER JOIN sys.schemas sc
 ON ta.schema_id = sc.schema_id
 WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
 GROUP BY sc.name,ta.name
 ORDER BY SUM(pa.rows) DESC

Regarde ça:

73
podiluska

pour obtenir toutes les tables dans une base de données:

select * from INFORMATION_SCHEMA.TABLES

pour obtenir toutes les colonnes dans une base de données:

select * from INFORMATION_SCHEMA.columns

pour obtenir toutes les vues dans une base de données:

select * from INFORMATION_SCHEMA.TABLES where table_type = 'view'
4
kavitha Reddy

Publié pour être complet.

Si vous cherchez nombre de lignes de tout tables dans tout bases de données (ce qui était ce que je cherchais), j'ai trouvé cette combinaison de this et ceci pour travailler. Aucune idée si c'est optimal ou pas:

SET NOCOUNT ON
DECLARE @AllTables table (DbName sysname,SchemaName sysname, TableName sysname, RowsCount int )
DECLARE
     @SQL nvarchar(4000)
SET @SQL='SELECT ''?'' AS DbName, s.name AS SchemaName, t.name AS TableName, p.rows AS RowsCount FROM [?].sys.tables t INNER JOIN sys.schemas s ON t.schema_id=s.schema_id INNER JOIN [?].sys.partitions p ON p.OBJECT_ID = t.OBJECT_ID'

INSERT INTO @AllTables (DbName, SchemaName, TableName, RowsCount)
    EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT DbName, SchemaName, TableName, SUM(RowsCount), MIN(RowsCount), SUM(1)
FROM @AllTables
WHERE RowsCount > 0
GROUP BY DbName, SchemaName, TableName
ORDER BY DbName, SchemaName, TableName
0
OldCurmudgeon

Essayez ceci c'est simple et rapide

SELECT T.name AS [TABLE NAME], I.rows AS [ROWCOUNT] 
FROM   sys.tables AS T 
   INNER JOIN sys.sysindexes AS I ON T.object_id = I.id 
   AND I.indid < 2 ORDER  BY I.rows DESC
0
Muhammad Sohail