2010-03-29 19 views

Respuesta

4

Prueba esto: (método muy rápido aunque potencialmente menos preciso.)

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 

Eso es un método de muchos. See here para muchas otras opciones.

+0

Cite la fuente, Paul: http://sqlserver2000.databases.aspfaq.com/how-do-i-get-a-list-of-sql-server-tables-and-their-row- counts.html – Matt

+0

@Matt: Me atrapaste a mitad de edición. Siempre hago. –

+1

esto es solo una estimación, no es 100% exacto, y utiliza una sintaxis de unión antigua horrible (asqueroso). –

3

De 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

Esto es exactamente lo que estaba buscando, ¡gracias! –

1

Como ya se ha publicado, si era un fuera de lo que probablemente haría uso de sp_msforeachtable. Sin embargo, se trata de un procedimiento del sistema undocument así que si eso es un problema, entonces usted puede hacer fácilmente así:

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

Estoy seguro de que puede conseguir algo mejor que esto, pero esto se debe hacer en caso de apuro. Para el registro, sp_spaceused es su amigo en consultas como esta!

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

jaja, y luego este desarrollador se aleja de la base de datos ... ;-) – Jaxidian

Cuestiones relacionadas