Thursday, August 20, 2009

Obteniendo las tablas con mas registros.

Que tal,

Recientemente estaba tratando de ver las tablas que mas consumían espacio en todas las bases de datos, encontré un script en un blog que mostraba el total de registros en la base de datos, pero yo quería que fuera para todas las bases de datos.

Así que le hice unos pequeños cambios para que funcionara con todas las bases de datos.

Les comparto el script, esta probado en SQL 2005 aunque debería funcionar en SQL 2008.

El script no hace un count(*) a todas las tablas, sino que va directamente a las tablas de sistema:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[BPSQL_Select_big_tables]
AS
BEGIN
SET NOCOUNT ON;

DECLARE @dbname2 varchar(40);
declare @id varchar(30);

DECLARE dbname CURSOR FOR select name,database_id from master.sys.databases where database_id>4

create table #tablas(
base_de_datos varchar(128),
tabla varchar(128),
total int
)

OPEN dbname
FETCH NEXT FROM dbname
INTO @dbname2,@id

WHILE @@FETCH_STATUS = 0
BEGIN

exec('SET NOCOUNT ON
use [' + @dbname2 + ']
insert #tablas

SELECT b.name,OBJECT_NAME(object_id) AS [Table Name], SUM(Rows) AS [Row Count]
FROM sys.partitions,sys.databases b
WHERE index_id < 2
and OBJECT_NAME(object_id) not like ''%sys%'' and OBJECT_NAME(object_id) not like ''%queue%''
and OBJECT_NAME(object_id) <> ''dtproperties'' and b.database_id='+@id+'
GROUP BY object_id,b.name
ORDER BY SUM(Rows) DESC')

FETCH NEXT FROM dbname INTO @dbname2,@id
END

CLOSE dbname
DEALLOCATE dbname

select top 100 *
from #tablas
order by 3 desc
drop table #tablas

END