Muchas Gracias Jorge.

 

Pero lo que quiero es saber cuánto ocupan los registros no las tablas. 

 

Te explico un poco, tenemos una tabla en la cual tenemos un campo que guarda 
una imagen, el tamaño de la imagen guardada varía, entonces queremos saber que 
registros ocupan más espacio.

 

Saludos

 

Angel

 

 

De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Jorge Caraballo
Enviado el: lunes, 02 de junio de 2008 12:22 PM
Para: Achahuanco Mujica, Angel Oliver (AOAM)
Asunto: [dbadmin] Espacio de Registros de Tablas

 

Una vez encontré este script, fijate si te sirve.

declare @id int
declare @type character(2)
declare @pages int
declare @dbname sysname
declare @dbsize dec(15,0)
declare @bytesperpage dec(15,0)
declare @pagesperMB dec(15,0)

create table #spt_space
(
objid int null,
rows int null,
reserved dec(15) null,
data dec(15) null,
indexp dec(15) null,
unused dec(15) null
)

set nocount on

-- Create a cursor to loop through the user tables
declare c_tables cursor for
select id
from sysobjects
where xtype = 'U'

open c_tables

fetch next from c_tables
into @id

while @@fetch_status = 0
begin

/* Code from sp_spaceused */
insert into #spt_space (objid, reserved)
select objid = @id, sum(reserved)
from sysindexes
where indid in (0, 1, 255)
and id = @id

select @pages = sum(dpages)
from sysindexes
where indid < 2
and id = @id
select @pages = @pages + isnull(sum(used), 0)
from sysindexes
where indid = 255
and id = @id
update #spt_space
set data = @pages
where objid = @id


/* index: sum(used) where indid in (0, 1, 255) - data */
update #spt_space
set indexp = (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
- data
where objid = @id

/* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */
update #spt_space
set unused = reserved
- (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
where objid = @id

update #spt_space
set rows = i.rows
from sysindexes i
where i.indid < 2
and i.id = @id
and objid = @id

fetch next from c_tables
into @id
end


select top 25
Table_Name = (select left(name,25) from sysobjects where id = objid),
rows = convert(char(11), rows),
reserved_KB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),
data_KB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),
index_size_KB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
unused_KB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')

from #spt_space, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
order by reserved desc

drop table #spt_space
close c_tables
deallocate c_tables

        ----- Original Message ----- 

        From: Achahuanco Mujica, Angel Oliver (AOAM) <mailto:[EMAIL PROTECTED]> 
 

        To: Jorge A. Caraballo <mailto:[EMAIL PROTECTED]>  

        Sent: Monday, June 02, 2008 2:08 PM

        Subject: [dbadmin] Espacio de Registros de Tablas

         

        Amigos

        Alguno sabe cómo obtener el espacio en disco que ocupan los registros 
en una tabla?

        Gracias

        Saludos

        Angel

         

Responder a