Cómo contar la cantidad de registros

18/07/2006 - 09:07 por dot | Informe spam
Hola a todos,
si ejecuto esta consulta:

SELECT A.name 'NOMBRE DE LA TABLA'
FROM SYSOBJECTS AS A
WHERE A.xtype = 'U'
ORDER BY A.name

obtengo los nombres de las tablas de mi base de datos. Cómo puedo
saber, en la misma consulta, la cantidad de registros que tiene cada tabla?
Recuerdo haber leido en algún lado que a veces es más rápido acceder a
una de las columnas de las tablas del sistema que tiene la cantidad de
registro de cada tabla, pero no sé qué columna y tabla del sistema es.
Muchas gracias por vuestra ayuda.


Mauricio

Preguntas similare

Leer las respuestas

#6 dot
18/07/2006 - 12:01 | Informe spam
Hola Carlos,
no es que lo necesite, solo estoy tratando de ver las distintas formas
de lograr el mismo resultado, me parece interesante y una muy buena
forma de aprender.
Muchas gracias por tu ayuda.
Saludos.

Mauricio
Copenhague, Dinamarca

Carlos Sacristán escribió:
Siempre puedes usar un cursor (una de las pocas situaciones en las que
es útil) y programarlo dentro de un procedimiento almacenado que te devuelva
los datos que necesitas.

De todos modos, entiendo que saber el número de registros de todas las
tablas de una base de datos suele ser una tarea de administración... ¿por
qué lo necesitas desde una aplicación cliente?


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"dot" <""mauricio(dot)nicastro\"@gmail(dot)com"> escribió en el mensaje
news:#
Ahhh, pero imagina que necesitas ejecutarlo en una sola sentencia SQL,
desde un programa realizado en VB u otro lenguaje. Por ahora, la
solución más práctica, aunque sé que no me asegura el valor correcto, es
usando la columna rows de sysindexes tal como me dijiste. Esta otra
solución también es interesante, solo que me obligaría a hacer algunos
pasos más.
Saludos.

Mauricio
Copenhague, Dinamarca


Carlos Sacristán escribió:
Sí. Si quisiera saber el número de registros exactos de todas las




tablas
de mi base de datos ejecutaría el siguiente script:

SELECT 'SELECT ''' + name + ''', COUNT(*) FROM ' + name
FROM sysobjects
WHERE TYPE = 'u'

Esta sentencia devuelve como resultado un listado del tipo

SELECT 'NombreTabla', COUNT(*) FROM NombreTabla
SELECT 'NombreTabla2', COUNT(*) FROM NombreTabla2

No tienes más que copiar ese resultado y ejecutarlo en otra ventana


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)







Respuesta Responder a este mensaje
#7 Carlos Sacristán
18/07/2006 - 12:11 | Informe spam
No hay más que decir al respecto entonces, muy buena actitud la tuya


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"dot" <""mauricio(dot)nicastro\"@gmail(dot)com"> escribió en el mensaje
news:
Hola Carlos,
no es que lo necesite, solo estoy tratando de ver las distintas formas
de lograr el mismo resultado, me parece interesante y una muy buena
forma de aprender.
Muchas gracias por tu ayuda.
Saludos.

Mauricio
Copenhague, Dinamarca

Carlos Sacristán escribió:
> Siempre puedes usar un cursor (una de las pocas situaciones en las


que
> es útil) y programarlo dentro de un procedimiento almacenado que te


devuelva
> los datos que necesitas.
>
> De todos modos, entiendo que saber el número de registros de todas


las
> tablas de una base de datos suele ser una tarea de administración...


¿por
> qué lo necesitas desde una aplicación cliente?
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "dot" <""mauricio(dot)nicastro\"@gmail(dot)com"> escribió en el mensaje
> news:#
>> Ahhh, pero imagina que necesitas ejecutarlo en una sola sentencia SQL,
>> desde un programa realizado en VB u otro lenguaje. Por ahora, la
>> solución más práctica, aunque sé que no me asegura el valor correcto,


es
>> usando la columna rows de sysindexes tal como me dijiste. Esta otra
>> solución también es interesante, solo que me obligaría a hacer algunos
>> pasos más.
>> Saludos.
>>
>> Mauricio
>> Copenhague, Dinamarca
>>
>>
>> Carlos Sacristán escribió:
>>> Sí. Si quisiera saber el número de registros exactos de todas las
> tablas
>>> de mi base de datos ejecutaría el siguiente script:
>>>
>>> SELECT 'SELECT ''' + name + ''', COUNT(*) FROM ' + name
>>> FROM sysobjects
>>> WHERE TYPE = 'u'
>>>
>>> Esta sentencia devuelve como resultado un listado del tipo
>>>
>>> SELECT 'NombreTabla', COUNT(*) FROM NombreTabla
>>> SELECT 'NombreTabla2', COUNT(*) FROM NombreTabla2
>>>
>>> No tienes más que copiar ese resultado y ejecutarlo en otra


ventana
>>>
>>>
>>> Un saludo
>>>
>>> -
>>> "Sólo sé que no sé nada. " (Sócrates)
>>>
>
>
Respuesta Responder a este mensaje
#8 Alejandro Mesa
18/07/2006 - 14:03 | Informe spam
dot,

Aqui tienes varias formas de alcanzar lo que necesitas.

1 - Usando el procedimiento no documentado sp_msforeachtable

2 - Seleccionando el valor desde la tabla de sistema sysindexes, pero antes
ejecutando el comando "dbcc updateusage" para asegurarnos que el valor este
bien sincronizado

3 - Usando cursores, que es la forma recomendada para estos casos

use northwind
go

exec sp_msforeachtable 'select ''?'', count(*) from ?'
go

dbcc updateusage (0)

select object_name([id]), rowcnt
from sysindexes
where indid in (0, 1) and objectproperty([id], 'IsUserTable') = 1
order by 1
go

create table #t (
table_name sysname,
rowcnt int,
)

declare @sql nvarchar(4000)
declare @ts sysname
declare @tn sysname
declare my_cursor cursor
local
fast_forward
for
select
table_schema,
table_name
from
information_schema.tables
where
table_type = 'BASE TABLE'

open my_cursor

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

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

set @sql = N'select ''' + @tn + ''' as table_name, count(*) as rowcnt from
[' + @ts + '].[' + @tn + ']'

insert into #t
exec sp_executesql @sql
end

close my_cursor
deallocate my_cursor

select * from #t order by table_name

drop table #t
go


AMB

"dot" <""mauricio(dot)nicastro"@gmail(do" wrote:

Hola a todos,
si ejecuto esta consulta:

SELECT A.name 'NOMBRE DE LA TABLA'
FROM SYSOBJECTS AS A
WHERE A.xtype = 'U'
ORDER BY A.name

obtengo los nombres de las tablas de mi base de datos. Cómo puedo
saber, en la misma consulta, la cantidad de registros que tiene cada tabla?
Recuerdo haber leido en algún lado que a veces es más rápido acceder a
una de las columnas de las tablas del sistema que tiene la cantidad de
registro de cada tabla, pero no sé qué columna y tabla del sistema es.
Muchas gracias por vuestra ayuda.


Mauricio

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida