Подсчет строк для всех таблиц одновременно - PullRequest
15 голосов
/ 09 января 2009

Я использую SQL Server 2005 и хотел бы узнать, как получить список всех таблиц с количеством записей в каждой.

Я знаю, что могу получить список таблиц, используя представление sys.tables, но не могу найти счет.

Спасибо

Ответы [ 6 ]

37 голосов
/ 09 января 2009

Отсюда: http://web.archive.org/web/20080701045806/http://sqlserver2000.databases.aspfaq.com:80/how-do-i-get-a-list-of-sql-server-tables-and-their-row-counts.html

SELECT 
    [TableName] = so.name, 
    [RowCount] = MAX(si.rows) 
FROM 
    sysobjects so, 
    sysindexes si 
WHERE 
    so.xtype = 'U' 
    AND 
    si.id = OBJECT_ID(so.name) 
GROUP BY 
    so.name 
ORDER BY 
    2 DESC
22 голосов
/ 20 января 2011

Во всяком случае, системная таблица sysindexes устарела в SQL 2008. Выше все еще работает, но вот запрос, который работает с системными представлениями SQL 2008.

select
schema_name(obj.schema_id) + '.' + obj.name,
row_count
from (
    select
        object_id,
        row_count = sum(row_count)
    from sys.dm_db_partition_stats
    where index_id < 2  -- heap or clustered index
    group by object_id
) Q
join sys.tables obj on obj.object_id = Q.object_id
5 голосов
/ 09 января 2009

Могу добавить, что sysindexes.rows - это приблизительное количество строк. Я бы запустил DBCC UPDATEUSAGE, если вам нужно более точное значение. У нас была эта проблема в БД с таблицами, содержащими более 47-50 миллионов строк, и мы думали, что потеряли около полумиллиона от каждой из них.

3 голосов
/ 09 января 2009

Возможно что-то вроде этого:

SELECT 
    [TableName] = so.name, 
    [RowCount] = MAX(si.rows) 
FROM 
    sysobjects so, 
    sysindexes si 
WHERE 
    so.xtype = 'U' 
    AND 
    si.id = OBJECT_ID(so.name) 
GROUP BY 
    so.name 
ORDER BY 
    2 DESC

http://web.archive.org/web/20080701045806/http://sqlserver2000.databases.aspfaq.com:80/how-do-i-get-a-list-of-sql-server-tables-and-their-row-counts.html

1 голос
/ 27 мая 2015

Все эти способы дадут вам количество строк в наборе результатов запроса select. SSMS также позволяет просматривать подробности объекта через: панель «Сведения об объекте» . Это доступно для 2005 года и всех версий после этого

Сведения о проводнике объектов - это компонент SQL Server Management Studio. Он обеспечивает табличное представление всех объектов на сервере и предоставляет пользовательский интерфейс для управления ими.

Чтобы добраться до «Окна сведений об объекте»: Нажмите «Объект», для которого вы хотите просмотреть сведения на панели «Обозреватель объектов», и нажмите F7 . Подробнее: https://technet.microsoft.com/en-us/library/ms191146(v=sql.90).aspx

Плюсы:

  1. Гораздо быстрее, чем запрос на выборку, поскольку SQL Server сохраняет эту информацию
  2. Не нужно каждый раз писать / копировать и вставлять выбранный запрос - вы только на расстоянии F7
  3. Дает вам гораздо больше информации, а не только количество строк

Примечание. Возможно, по умолчанию на панели «Сведения об объекте» не отображается число строк, можно щелкнуть заголовок столбца и ввести его.

1 голос
/ 18 октября 2012

Это мой метод:

create table #rowcount (tablename varchar(128), rowcnt int)
exec sp_MSforeachtable 
   'insert into #rowcount select ''?'', count(*) from ?'
select * from #rowcount
    order by tablename
drop table #rowcount

работает как брелок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...