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

Мне нужно знать, сколько записей в каждой таблице в конкретной базе данных. Мне все равно, что в записи, их все нужно будет подсчитать.

Я уже знаю, как это сделать для отдельной таблицы как SELECT Count(1) FROM [my_table_name] , но это немного избыточно для более 200 таблиц.

Попробуйте следующее: (Очень быстрый метод, хотя потенциально менее точный.)

 SELECT so.name, MAX(si.rows) FROM sysobjects so JOIN sysindexes si ON so.xtype = 'U' AND si.id = OBJECT_ID(so.name) GROUP BY so.name ORDER BY 2 DESC 

Это один из многих методов. См. Здесь несколько других опций.

From Как получить список таблиц SQL Server и их количество строк?

 DECLARE @SQL VARCHAR(255) SET @SQL = 'DBCC UPDATEUSAGE (' + DB_NAME() + ')' EXEC(@SQL) CREATE TABLE #foo ( tablename VARCHAR(255), rc INT ) INSERT #foo EXEC sp_msForEachTable 'SELECT PARSENAME(''?'', 1), COUNT(*) FROM ?' SELECT tablename, rc FROM #foo ORDER BY rc DESC DROP TABLE #foo 

Как уже было опубликовано, если бы это была одна вещь, я бы, вероятно, использовал sp_msforeachtable. Тем не менее, это системная процедура без документов, поэтому, если это проблема, вы можете легко сделать это следующим образом:

 DECLARE @SQL VARCHAR(MAX) SET @SQL = '' SELECT @SQL = @SQL + 'SELECT ''' + TABLE_NAME + ''' AS TableName, COUNT(*) AS RecordCount FROM [' + TABLE_NAME + '];' + CHAR(13) FROM INFORMATION_SCHEMA.TABLES EXECUTE (@SQL) 

Я уверен, что вы можете получить что-то лучшее, чем это, но это должно сделать в крайнем случае. Для записи sp_spaceused является вашим другом в таких запросах!

 DECLARE @tbls table (TableID int identity, TableName varchar(max)) INSERT INTO @tbls SELECT t1.name FROM sysobjects t1 INNER JOIN sysindexes t2 ON t1.id = t2.id WHERE t2.indid <= 1 AND t2.rows > 0 AND OBJECTPROPERTY(t1.id,'IsUserTable') = 1 DECLARE @tblcount int SELECT @tblcount=COUNT(1) FROM @tbls DECLARE @results table (name varchar(max), [rows] bigint, reserved varchar(max), data varchar(max), index_size varchar(max), unused varchar(max)) DECLARE @counter int SET @counter = 0 DECLARE @tblname varchar(max) while @counter < @tblcount begin SELECT @tblname=TableName FROM @tbls WHERE [email protected]+1 INSERT INTO @results exec sp_spaceused @tblname SET @counter = @counter+1 end SELECT * FROM @results 
Давайте будем гением компьютера.