ver una todas tamaño tablas tabla registros por para numero listar las fila estado ejemplos datos contador consultas comando cantidad bases sql sql-server rowcount

tamaño - Cómo obtener el recuento de filas para todas las tablas en una base de datos del SERVIDOR SQL



tamaño de todas las bases de datos sql server (13)

Aquí hay un enfoque de SQL dinámico que también le da el esquema también:

DECLARE @sql nvarchar(MAX) SELECT @sql = COALESCE(@sql + '' UNION ALL '', '''') + ''SELECT '''''' + s.name + '''''' AS ''''Schema'''', '''''' + t.name + '''''' AS ''''Table'''', COUNT(*) AS Count FROM '' + QUOTENAME(s.name) + ''.'' + QUOTENAME(t.name) FROM sys.schemas s INNER JOIN sys.tables t ON t.schema_id = s.schema_id ORDER BY s.name, t.name EXEC(@sql)

Si fuera necesario, sería trivial extender esto para ejecutar todas las bases de datos en la instancia (unirse a sys.databases ).

Esta pregunta ya tiene una respuesta aquí:

Estoy buscando un script SQL que pueda usarse para determinar si hay datos (es decir, recuento de filas) en cualquiera de las tablas de una base de datos determinada.

La idea es reencarnar la base de datos en caso de que haya filas existentes (en cualquiera de las bases de datos).

La base de datos de la que se habla es Microsoft SQL SERVER .

¿Podría alguien sugerir una secuencia de comandos de muestra?


Corto y dulce

sp_MSForEachTable ''DECLARE @t AS VARCHAR(MAX); SELECT @t = CAST(COUNT(1) as VARCHAR(MAX)) + CHAR(9) + CHAR(9) + ''''?'''' FROM ? ; PRINT @t''

Salida:


El siguiente SQL le proporcionará el número de filas de todas las tablas en una base de datos:

CREATE TABLE #counts ( table_name varchar(255), row_count int ) EXEC sp_MSForEachTable @command1=''INSERT #counts (table_name, row_count) SELECT ''''?'''', COUNT(*) FROM ?'' SELECT table_name, row_count FROM #counts ORDER BY table_name, row_count DESC DROP TABLE #counts

La salida será una lista de tablas y sus recuentos de filas.

Si solo desea que el número total de filas en toda la base de datos, agregue:

SELECT SUM(row_count) AS total_row_count FROM #counts

obtendrá un único valor para el número total de filas en toda la base de datos.


Esta es mi solución favorita para SQL 2008, que coloca los resultados en una tabla temporal "TEST" que puedo usar para ordenar y obtener los resultados que necesito:

SET NOCOUNT ON DBCC UPDATEUSAGE(0) DROP TABLE #t; CREATE TABLE #t ( [name] NVARCHAR(128), [rows] CHAR(11), reserved VARCHAR(18), data VARCHAR(18), index_size VARCHAR(18), unused VARCHAR(18) ) ; INSERT #t EXEC sp_msForEachTable ''EXEC sp_spaceused ''''?'''''' SELECT * INTO TEST FROM #t; DROP TABLE #t; SELECT name, [rows], reserved, data, index_size, unused FROM TEST / WHERE ([rows] > 0) AND (name LIKE ''XXX%'')


Este se ve mejor que los otros, creo.

USE [enter your db name here] GO SELECT SCHEMA_NAME(A.schema_id) + ''.'' + A.Name, SUM(B.rows) AS ''RowCount'' FROM sys.objects A INNER JOIN sys.partitions B ON A.object_id = B.object_id WHERE A.type = ''U'' GROUP BY A.schema_id, A.Name GO


Funciona en Azure, no requiere procs almacenados.

SELECT t.name, s.row_count from sys.tables t JOIN sys.dm_db_partition_stats s ON t.object_id = s.object_id AND t.type_desc = ''USER_TABLE'' AND t.name not like ''%dss%'' AND s.index_id IN (0,1)

Credit


Haría un pequeño cambio en la solución de Frederik. Yo usaría el procedimiento almacenado del sistema sp_spaceused que también incluirá datos y tamaños de índice.

declare c_tables cursor fast_forward for select table_name from information_schema.tables open c_tables declare @tablename varchar(255) declare @stmt nvarchar(2000) declare @rowcount int fetch next from c_tables into @tablename while @@fetch_status = 0 begin select @stmt = ''sp_spaceused '' + @tablename exec sp_executesql @stmt fetch next from c_tables into @tablename end close c_tables deallocate c_tables



SQL Server 2005 o posterior ofrece un buen informe que muestra los tamaños de las tablas, incluidos los recuentos de filas, etc. Está en Informes estándar, y es el uso del disco por tabla.

Programáticamente, hay una buena solución en: http://www.sqlservercentral.com/articles/T-SQL/67624/


Si desea pasar el tiempo y los recursos necesarios para contar (*) sus tablas de 3 millones de filas. Pruebe esto por SQL SERVER Central de Kendal Van Dyke.

Recuentos de filas usando sysindexes Si está utilizando SQL 2000, necesitará usar sysindexes así:

-- Shows all user tables and row counts for the current database -- Remove OBJECTPROPERTY function call to include system objects SELECT o.NAME, i.rowcnt FROM sysindexes AS i INNER JOIN sysobjects AS o ON i.id = o.id WHERE i.indid < 2 AND OBJECTPROPERTY(o.id, ''IsMSShipped'') = 0 ORDER BY o.NAME

Si está utilizando SQL 2005 o 2008, los sysindexes de consulta seguirán funcionando, pero Microsoft recomienda que los sysindexes se eliminen en una versión futura de SQL Server, por lo que, como buena práctica, debería utilizar los DMV, por lo tanto:

-- Shows all user tables and row counts for the current database -- Remove is_ms_shipped = 0 check to include system objects -- i.index_id < 2 indicates clustered index (1) or hash table (0) SELECT o.name, ddps.row_count FROM sys.indexes AS i INNER JOIN sys.objects AS o ON i.OBJECT_ID = o.OBJECT_ID INNER JOIN sys.dm_db_partition_stats AS ddps ON i.OBJECT_ID = ddps.OBJECT_ID AND i.index_id = ddps.index_id WHERE i.index_id < 2 AND o.is_ms_shipped = 0 ORDER BY o.NAME


seleccione todas las filas de la vista information_schema.tables y emita una instrucción count (*) para cada entrada que se haya devuelto desde esa vista.

declare c_tables cursor fast_forward for select table_name from information_schema.tables open c_tables declare @tablename varchar(255) declare @stmt nvarchar(2000) declare @rowcount int fetch next from c_tables into @tablename while @@fetch_status = 0 begin select @stmt = ''select @rowcount = count(*) from '' + @tablename exec sp_executesql @stmt, N''@rowcount int output'', @rowcount=@rowcount OUTPUT print N''table: '' + @tablename + '' has '' + convert(nvarchar(1000),@rowcount) + '' rows'' fetch next from c_tables into @tablename end close c_tables deallocate c_tables


SELECT sc.name +''.''+ ta.name TableName, SUM(pa.rows) RowCnt FROM sys.tables ta INNER JOIN sys.partitions pa ON pa.OBJECT_ID = ta.OBJECT_ID INNER JOIN sys.schemas sc ON ta.schema_id = sc.schema_id WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0) GROUP BY sc.name,ta.name ORDER BY SUM(pa.rows) DESC


SELECT SUM(sdmvPTNS.row_count) AS [DBRows] FROM sys.objects AS sOBJ INNER JOIN sys.dm_db_partition_stats AS sdmvPTNS ON sOBJ.object_id = sdmvPTNS.object_id WHERE sOBJ.type = ''U'' AND sOBJ.is_ms_shipped = 0 AND sdmvPTNS.index_id < 2 GO