jueves, 11 de junio de 2009

Obtener el tamaño de una tabla en SQL Server

Hoy en el trabajo tratando de ver el crecimiento de la Base de Datos me encontre con la pregunta de ¿que tamaño tendra cada tabla? y encontre un Procedimiento Almacenado en SQL Server que te lo dice, pero no lo iba a hacer tabla por tabla asi que decidi crear una consulta

Espero les sirva

  
SET NOCOUNT ON;
DECLARE
@fiMaxFilas INT,
@fiRenglonActual INT,
@fcComando VARCHAR(120)

SET @fiRenglonActual = 1

DECLARE @AllTables TABLE
(
fiIndice INT NOT NULL PRIMARY KEY,
fcNombreTabla VARCHAR(100) NOT NULL
)

INSERT INTO @AllTables
SELECT ROW_NUMBER() OVER(ORDER BY name) AS fiIndice,
name
FROM sysobjects
WHERE type = 'U'

SELECT @fiMaxFilas = MAX(fiIndice) FROM @AllTables

WHILE (@fiRenglonActual <= @fiMaxFilas )
BEGIN

SELECT @fcComando = 'sp_spaceused '+ fcNombreTabla FROM @AllTables WHERE fiIndice = @fiRenglonActual
EXECUTE (@fcComando)

SET @fiRenglonActual = @fiRenglonActual+1

END

5 comentarios:

Anónimo dijo...

Me ha venido genial. Gracias por compartirlo.

Saludos!

Anónimo dijo...

Pues la verdad esta muy basura tu código, ya que te da un grid por cada tabla analizada, lo cual es muy poco practico para reportar algo o analizarlo.

Este código es más breve y da todo en una sola tabla.

Create PROCEDURE dbo.TableSpaceUsed
AS

-- Create the temporary table...
CREATE TABLE #tblResults
(
[name] nvarchar(50),
[rows] int,
[reserved] varchar(58),
[reserved_int] int default(0),
[data] varchar(50),
[data_int] int default(0),
[index_size] varchar(50),
[index_size_int] int default(0),
[unused] varchar(50),
[unused_int] int default(0)
)


-- Populate the temp table...
EXEC sp_MSforeachtable @command1=
"INSERT INTO #tblResults
([name],[rows],[reserved],[data],[index_size],[unused])
EXEC sp_spaceused '?'"

-- Strip out the " KB" portion from the fields
UPDATE #tblResults SET
[reserved_int] = CAST(SUBSTRING([reserved], 1,
CHARINDEX(' ', [reserved])) AS int),
[data_int] = CAST(SUBSTRING([data], 1,
CHARINDEX(' ', [data])) AS int),
[index_size_int] = CAST(SUBSTRING([index_size], 1,
CHARINDEX(' ', [index_size])) AS int),
[unused_int] = CAST(SUBSTRING([unused], 1,
CHARINDEX(' ', [unused])) AS int)

-- Return the results...
SELECT * FROM #tblResults

Deja el SQL a los expertos y sigue con tu .net

Luis Felipe dijo...

Pues muchas gracias por el aporte la verdad no conocía el sp_MSforeachtable creo que sera de utilidad para mas de uno, pero si lo que te interesa es reportar algo o analizarlo te recomendaría lo siguiente:

Abrir el árbol de la Instancia de SQL -> Base de datos que te interesa analizar.

Clic derecho con el mouse sobre la BD y aparecerá un menu, poner el mouse encima de informes-> informes estandar -> Uso de disco por tabla

Mas rápido y sin tirar ninguna linea de código obtienes el tamaño de cada tabla.

Espero te sea de ayuda.

Y sigue con tu SQL vas por buen camino

Anónimo dijo...

Total el codigo publciado por el arrogante lo sacó de la pagina de soporte de TM
que malll
qyueee malllll

Anónimo dijo...

Y si el Arrogante! que según la hace se dice ser un programador muuy acá de sql , jajaja saco su supercodigo de otrosss portales!! ehh!! no Gracias!!!!!!!!!!!!!
La gente q presume de más es la que carece de tanto