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


Возможно что-то вроде этого:
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
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
@ jdl134679 он заказывает мой rowCount, причем сначала таблица с большинством строк
@jleach Да, см. документы в ORDER BY. «Столбец сортировки может быть указан как имя или псевдоним столбца или неотрицательное целое число, представляющее позицию столбца в списке выбора».
Я мог бы добавить, что sysindexes.rows - это приблизительное количество строк. Я бы запустил DBCC UPDATEUSAGE, если вам нужно более точное значение. У нас была эта проблема в БД с таблицами, содержащими более 47-50 миллионов строк, и мы думали, что потеряли около полумиллиона от каждой из них.
DBCC UPDATEUSAGE, похоже, не решает здесь все возможные проблемы. Я попробовал update statistics dbo.table_name with rowcount = 100000, pagecount = 100000, DBCC исправил ложное вручную установленное количество страниц, но не количество ложных строк (но я думаю, это очень крайний случай!)
Как бы то ни было, системная таблица 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
Это именно то, что я хотел (после того, как я поставил несколько условий WHERE после соединения.)
Это мой метод:
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
работает как шарм
Кажется, что он медленнее, чем другие варианты, хотя может быть более точным.
Все эти способы дадут вам количество строк в результирующем наборе запроса на выборку. SSMS также дает вам возможность просмотреть подробную информацию об объекте через: Панель «Сведения об обозревателе объектов». Это доступно для 2005 и всех последующих версий.
Сведения об обозревателе объектов - это компонент SQL Server Management Studio. Он обеспечивает табличное представление всех объектов на сервере и представляет собой пользовательский интерфейс для управления ими.
Чтобы перейти в «Окно сведений об объекте»: Щелкните Объект, сведения о котором необходимо просмотреть, на панели «Обозреватель объектов» и нажмите F7. Подробнее: https://technet.microsoft.com/en-us/library/ms191146(v=sql.90).aspx
Плюсы:
Примечание: у вас может не быть счетчика строк на панели сведений об объекте по умолчанию, вы можете щелкнуть заголовок столбца и ввести его.
Просто из любопытства, какой цели служит
ORDER BY 2 DESC?