Подтвердить что ты не робот

MS SQL 2008 - получить все имена таблиц и их количество строк в БД

Я пытаюсь определить, на какие таблицы влияет обновление данных, хотя приложение (разработанное другими). В БД имеется более 200 таблиц, и я бы не стал проверять каждый из них на предмет изменений.

Есть ли другой способ, когда я могу перечислить все имена таблиц вместе со своим числом строк?

select table_name from information_schema.tables

Список всех таблиц моей покупки в БД, как включить число строк?

4b9b3361

Ответ 1

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

Смотрите это:

Ответ 2

чтобы получить все таблицы в базе данных:

select * from INFORMATION_SCHEMA.TABLES

чтобы получить все столбцы в базе данных:

select * from INFORMATION_SCHEMA.columns

чтобы получить все представления в db:

select * from INFORMATION_SCHEMA.TABLES where table_type = 'view'

Ответ 3

Отправлено для полноты.

Если вы ищете количество строк all в всех базах данных (это то, что я искал), то я нашел эту комбинацию this и для работы. Не знаю, оптимально это или нет:

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