2010-03-29 66 views

回答

4

試試這個:(非常快,雖然可能不太精確的方法。)

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 

這是很多的一種方法。 See here爲其他幾個選項。

+0

引用您的資料,Paul:http://sqlserver2000.databases.aspfaq.com/how-do-i-get-a-list-of-sql-server-tables-and-their-row- counts.html – Matt 2010-03-29 20:33:46

+0

@Matt:你抓住了我中期編輯。我經常做。 – 2010-03-29 20:35:43

+1

這只是一個估計,不是100%確切的,並且使用了可怕的古代(惡意)連接語法。 – 2010-03-29 20:36:57

3

How do I get a list of SQL Server tables and their row counts?

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 
+0

這正是我正在尋找的,謝謝! – 2010-03-29 20:43:12

1

正如已經公佈,如果是一次性的事情,我可能會使用sp_msforeachtable。然而,這是一個undocument系統過程,所以如果這是一個問題,那麼你可以很容易地做到這一點是這樣的:

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) 
1

我敢肯定,你可以得到比這更好的東西,但是這應該在一個緊要關頭。備案,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 
+0

哈哈,然後這個開發背離數據庫... ;-) – Jaxidian 2010-03-29 20:44:32

相關問題