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.
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?
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:
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'
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
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