Determinar tamaño de cada una de las tablas en SQL Server 2000

El siguiente script sql (o sentencia sql) nos permite conocer el tamaño de cada una de las tablas en nuestra db.

Siempre la he utilizado con SQL Server 2000 SP3, no lo he probado en 2k5 o 2k8, aunque deberia funcionar sin problemas.  Aca va el codigo:

 

 

SELECT top 50 

   so.name,
   FILEGROUP_NAME(si.groupid) file_group,
   Coalesce(8 * Sum(CASE WHEN si.indid     IN (255)  THEN si.reserved END), 0) +
            8 * Sum(CASE WHEN si.indid              IN (0, 1) THEN si.reserved END) +
   Coalesce(8 * Sum(CASE WHEN si.indid NOT IN (0, 1, 255) THEN si.reserved END), 0) AS total_kb,

   (Coalesce(8 * Sum(CASE WHEN si.indid     IN (255)  THEN si.reserved END), 0) +
            8 * Sum(CASE WHEN si.indid              IN (0, 1) THEN si.reserved END) +
   Coalesce(8 * Sum(CASE WHEN si.indid NOT IN (0, 1, 255) THEN si.reserved END), 0))/1024 AS total_Mg,

   cast(((Coalesce(8 * Sum(CASE WHEN si.indid     IN (255)  THEN si.reserved END), 0) +
            8 * Sum(CASE WHEN si.indid              IN (0, 1) THEN si.reserved END) +
   Coalesce(8 * Sum(CASE WHEN si.indid NOT IN (0, 1, 255) THEN si.reserved END), 0))/1024)/1024.0 as decimal(10,2)) AS total_gb,

   Coalesce(8 * Sum(CASE WHEN si.indid     IN (255)  THEN si.reserved END), 0) AS blob_kb,  
            8 * Sum(CASE WHEN si.indid              IN (0, 1) THEN si.reserved END) AS data_kb,  

   Coalesce(8 * Sum(CASE WHEN si.indid NOT IN (0, 1, 255) THEN si.reserved END), 0) AS index_kb,


   Coalesce(8 * Sum(CASE WHEN si.indid     IN (255)  THEN si.reserved END), 0) AS blob_kb,  
            8 * Sum(CASE WHEN si.indid              IN (0, 1) THEN si.reserved END) / 1024 AS data_Mb,  

   Coalesce(8 * Sum(CASE WHEN si.indid NOT IN (0, 1, 255) THEN si.reserved END), 0) / 1024 AS index_Mb,


   max(si.rowcnt) as cantidadRegistos,


   cast((Coalesce(8 * Sum(CASE WHEN si.indid     IN (255)  THEN si.reserved END), 0) +
            8 * Sum(CASE WHEN si.indid              IN (0, 1) THEN si.reserved END) +
   Coalesce(8 * Sum(CASE WHEN si.indid NOT IN (0, 1, 255) THEN si.reserved END), 0))
	/ case when max(si.rowcnt) = 0 then null else cast(max(si.rowcnt) as decimal(15,2)) 

	/ 1024 end as decimal (15,0)) as bPerRow

FROM dbo.sysobjects  AS so (nolock)
JOIN dbo.sysindexes  AS si (nolock)
      ON (si.id = so.id)
WHERE  'U' = so.type
GROUP BY so.name
	,si.groupid
ORDER BY    Coalesce(8 * Sum(CASE WHEN si.indid     IN (255)  THEN si.reserved END), 0) +
            8 * Sum(CASE WHEN si.indid              IN (0, 1) THEN si.reserved END) +
   	    Coalesce(8 * Sum(CASE WHEN si.indid NOT IN (0, 1, 255) THEN si.reserved END), 0)
desc


 

Comentarios

Muy Util

Excelente, era precisamente lo que buscaba.

Muchas gracias.

Buen trabajo

Corrección

Se corrigio la falta de los signos "+" en la sentencia SQL

muy util

gracias, muy util, en 2005 funciona bien.

gracias por el comentario

gracias por el comentario.

felicitaciones

ok excelente en sql 2008 ent funciona muy bien

Gracias por el comentario!

Se agradece!!

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.

Tags for Determinar tamaño de cada una de las tablas en SQL Server 2000