Tablas con datos

06/04/2005 - 17:26 por Hernan Nieto | Informe spam
Hola:

Necesito conocer cuales tablas de una BD tienen datos, puedo saber esto
consultando las tablas del sistema. Gracias.

Saludos.

Preguntas similare

Leer las respuestas

#1 Isaías
06/04/2005 - 17:43 | Informe spam
Esto le dara una idea (no tengo el nombre de la persona a
la cual darle el credito, lo siento)

DBCC UPDATEUSAGE (0) WITH NO_INFOMSGS
SELECT O.name, I.rows
FROM sysindexes I, sysobjects O
WHERE O.type = 'U'
AND O.id = I.id
AND I.indid in (0,1)
ORDER BY I.name
Respuesta Responder a este mensaje
#2 Maxi
06/04/2005 - 17:47 | Informe spam
Hola, quizas algo asi como

select o.name, i.rows
from sysobjects o
inner join sysindexes i
on (o.id = i.id)
where o.type = 'u'
and i.indid < 2
and i.rows = 0
order by o.name




Salu2
Maxi


"Hernan Nieto" escribió en el mensaje
news:
Hola:

Necesito conocer cuales tablas de una BD tienen datos, puedo saber esto
consultando las tablas del sistema. Gracias.

Saludos.


Respuesta Responder a este mensaje
#3 Alejandro Mesa
06/04/2005 - 17:55 | Informe spam
Hernan,

Puedes usar la tabla de systema [sysindexes] y traer las tablas con [rowcnt]
0 pero que el [indid] < 2 y que esta tabla no sea de systema, pero debes


correr DBCC UPDATEUSAGE antes de hacer esto para que actualize la tabla
sysindexes con la informacion al dia. Tambien puedes usar un procedimiento
almacenado no documentado sp_msforeachtable (no te lo recomiendo para scripts
que se corren con frequencia en bd en produccion porque este puede ser
cambiado por Microsoft sin previo aviso), y por ultimo puedes crear un cursor
para navegar por la vista information_schema.tables y capturar el count(*) de
cada una y seleccionar las que tengan count(*) > 0. Aca te paso los tres
ejemplos.

use northwind
go

dbcc updateusage (0)
go

select
object_name([id]),
rowcnt
from
sysindexes
where
indid < 2
and objectproperty([id], 'IsUserTable') = 1
and objectproperty([id], 'IsMSShipped') = 0
and rowcnt > 0
go

exec sp_msforeachtable 'if exists(select count(*) from ?) print ''?'''
go

create table #t (
tname sysname,
rcnt int
)

declare @tn sysname
declare @sql nvarchar(4000)

declare my_cursor cursor local fast_forward
for
select
quotename(table_schema) + '.' + quotename(table_name)
from
information_schema.tables
where
objectproperty(object_id(quotename(table_schema) + '.' +
quotename(table_name)), 'IsUserTable') = 1
and objectproperty(object_id(quotename(table_schema) + '.' +
quotename(table_name)), 'IsMSShipped') = 0

open my_cursor

while 1 = 1
begin
fetch next from my_cursor into @tn

if @@error != 0 or @@fetch_status != 0 break

set @sql = N'select ''' + @tn + N''', count(*) from ' + @tn

insert into #t
exec sp_executesql @sql
end

close my_cursor
deallocate my_cursor

select * from #t
where rcnt > 0

drop table #t
go


AMB


"Hernan Nieto" wrote:

Hola:

Necesito conocer cuales tablas de una BD tienen datos, puedo saber esto
consultando las tablas del sistema. Gracias.

Saludos.



Respuesta Responder a este mensaje
#4 Alejandro Mesa
06/04/2005 - 17:57 | Informe spam
Correccion,

Favor cambiar esta linea.

exec sp_msforeachtable 'if exists(select count(*) from ?) print ''?'''



exec sp_msforeachtable 'if (select count(*) from ?) > 0 print ''?'''


AMB

"Alejandro Mesa" wrote:

Hernan,

Puedes usar la tabla de systema [sysindexes] y traer las tablas con [rowcnt]
> 0 pero que el [indid] < 2 y que esta tabla no sea de systema, pero debes
correr DBCC UPDATEUSAGE antes de hacer esto para que actualize la tabla
sysindexes con la informacion al dia. Tambien puedes usar un procedimiento
almacenado no documentado sp_msforeachtable (no te lo recomiendo para scripts
que se corren con frequencia en bd en produccion porque este puede ser
cambiado por Microsoft sin previo aviso), y por ultimo puedes crear un cursor
para navegar por la vista information_schema.tables y capturar el count(*) de
cada una y seleccionar las que tengan count(*) > 0. Aca te paso los tres
ejemplos.

use northwind
go

dbcc updateusage (0)
go

select
object_name([id]),
rowcnt
from
sysindexes
where
indid < 2
and objectproperty([id], 'IsUserTable') = 1
and objectproperty([id], 'IsMSShipped') = 0
and rowcnt > 0
go

exec sp_msforeachtable 'if exists(select count(*) from ?) print ''?'''
go

create table #t (
tname sysname,
rcnt int
)

declare @tn sysname
declare @sql nvarchar(4000)

declare my_cursor cursor local fast_forward
for
select
quotename(table_schema) + '.' + quotename(table_name)
from
information_schema.tables
where
objectproperty(object_id(quotename(table_schema) + '.' +
quotename(table_name)), 'IsUserTable') = 1
and objectproperty(object_id(quotename(table_schema) + '.' +
quotename(table_name)), 'IsMSShipped') = 0

open my_cursor

while 1 = 1
begin
fetch next from my_cursor into @tn

if @@error != 0 or @@fetch_status != 0 break

set @sql = N'select ''' + @tn + N''', count(*) from ' + @tn

insert into #t
exec sp_executesql @sql
end

close my_cursor
deallocate my_cursor

select * from #t
where rcnt > 0

drop table #t
go


AMB


"Hernan Nieto" wrote:

> Hola:
>
> Necesito conocer cuales tablas de una BD tienen datos, puedo saber esto
> consultando las tablas del sistema. Gracias.
>
> Saludos.
>
>
>
Respuesta Responder a este mensaje
#5 Hernan Nieto
20/04/2005 - 16:08 | Informe spam
Gracias
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida