Как подсчитать каждую запись в каждой таблице в базе данных SQL Server 2005? - PullRequest
5 голосов
/ 30 марта 2010

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

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

Ответы [ 4 ]

4 голосов
/ 30 марта 2010

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

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

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

3 голосов
/ 30 марта 2010

С Как получить список таблиц 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 
1 голос
/ 30 марта 2010

Я уверен, что вы можете получить что-то лучше, чем это, но это должно быть сделано в крайнем случае. Для записи, 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 TableID=@counter+1

    INSERT INTO @results
    exec sp_spaceused @tblname

    SET @counter = @counter+1
end

SELECT * FROM @results
1 голос
/ 30 марта 2010

Как уже было написано, если бы это было единственное, я бы, вероятно, использовал 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...