MAX Y COUNT

05/08/2004 - 22:00 por Ale | Informe spam
Hay forma de saber la cantidad de registros de una tabla
sin usar el count?
Y saber el Maximo o el ultimo registro insertado en una
tabla sin usar el MAX
El tema es que no usamos IDENTITY.

Slds y gracias

Preguntas similare

Leer las respuestas

#1 ulises
05/08/2004 - 23:22 | Informe spam
Así uses IDENTITY siempre necesitaras el COUNT y el MAX
para obtener los datos que deseas, siempre tienes la
alternativa de usar la columna rowcnt de la tabla
sysindexes para obtener la cantidad de registros pero como
tiene una frecuencia de actualización te dará un dato
aproximado y no necesariamente exacto.

Saludos,
Ulises

Hay forma de saber la cantidad de registros de una tabla
sin usar el count?
Y saber el Maximo o el ultimo registro insertado en una
tabla sin usar el MAX
El tema es que no usamos IDENTITY.

Slds y gracias
.

Respuesta Responder a este mensaje
#2 MAXI
06/08/2004 - 01:58 | Informe spam
Cual es el problema de usar el Count?




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messager:


"Ale" escribió en el mensaje
news:0c6c01c47b26$d27abf90$
Hay forma de saber la cantidad de registros de una tabla
sin usar el count?
Y saber el Maximo o el ultimo registro insertado en una
tabla sin usar el MAX
El tema es que no usamos IDENTITY.

Slds y gracias
Respuesta Responder a este mensaje
#3 Emilio Boucau \(en casa\)
06/08/2004 - 02:16 | Informe spam
Ale,

la cantidad de filas de una tabla se puede obtener con un query a las tablas
del sistema (es lo que hace el EM cuando das doble click sobre una tabla y
te muestra la estructura y cantidad de filas). Ahora, si queres obtener
datos de tu tabla deberas usar funciones como Max().

Aca tenes un query donde se consulta por nombre de tabla o no. Es untrozo,
pero te dara la idea de lo que te hace falta:

IF exists ( select * from sysobjects
where id = object_id(@tablename) and sysstat & 0xf = 3 )
BEGIN

select o.name, i.rows
from sysobjects o
inner join sysindexes i
on (o.id = i.id)
where o.id = object_id(@tablename)
and i.indid < 2
order by o.name
END

ELSE

BEGIN
select @dbname = db_name()
raiserror ('El objeto "%s" no existe en la base de datos "%s" o no es una
tabla de usuario.',
16, 1, @tablename, @dbname)
END

END

ELSE
BEGIN

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
order by o.name

END


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com
Respuesta Responder a este mensaje
#4 MAXI
06/08/2004 - 02:22 | Informe spam
Amigo, aca me animo a discutirle señor ;-)

1) estas usando tablas de sistema y no es aconsejable, esa query no sabemos
si funcionara en futuras versiones

2) estas tomando la cantidad de filas de la tabla Sysindexes,hmm estas
seguro que eso representa la cantidad de filas de una tabla!! que pasa si no
hay actulizacion de indices de forma automatica por ej? ese dato es bueno?

A tus comentarios :-)




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messager:


"Emilio Boucau (en casa)" escribió en el mensaje
news:
Ale,

la cantidad de filas de una tabla se puede obtener con un query a las


tablas
del sistema (es lo que hace el EM cuando das doble click sobre una tabla y
te muestra la estructura y cantidad de filas). Ahora, si queres obtener
datos de tu tabla deberas usar funciones como Max().

Aca tenes un query donde se consulta por nombre de tabla o no. Es untrozo,
pero te dara la idea de lo que te hace falta:

IF exists ( select * from sysobjects
where id = object_id(@tablename) and sysstat & 0xf 3 )
BEGIN

select o.name, i.rows
from sysobjects o
inner join sysindexes i
on (o.id = i.id)
where o.id = object_id(@tablename)
and i.indid < 2
order by o.name
END

ELSE

BEGIN
select @dbname = db_name()
raiserror ('El objeto "%s" no existe en la base de datos "%s" o no es


una
tabla de usuario.',
16, 1, @tablename, @dbname)
END

END

ELSE
BEGIN

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
order by o.name

END


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com


Respuesta Responder a este mensaje
#5 Emilio Boucau \(en casa\)
06/08/2004 - 02:35 | Informe spam
1) Ahi tenes razon, no es aconsejable esto ... pero ...
2) probalo ... ;-)


Saludos !

Emilio Boucau
Buenos Aires - Argentina
http://www.portalsql.com
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida