PDA

Ver la Versión Completa : como conocer el ultimo valor autonumerico creado de una tabla


Tama
09-06-2004, 17:11:01
Hola:

La consulta que estoy usando es :
SELECT @@IDENTITY
Ylo que me ocurre es que al borrar filas de la tabla el valor que me da esa consulta no es el ultimo existente, si no que el ultimo creado y que por supuesto no existe.
¿Sabriais otra instruccion para que me de ese dato actualizado?

Gracias.

delphi.com.ar
09-06-2004, 17:15:32
@@IDENTITY te retorna el valor del último Autonumérico generado por el motor, digamos que lo tendrías que evaluar despues de hacer el INSERT.
Lo que vos querés hacer, lo podes solucionar haciendo un:SELECT MAX(CAMPO)
FROM TABLA

Saludos!

__marcsc
09-06-2004, 17:16:25
SELECT MAX(Campo)
FROM Tabla


EDIT: Maldito!! Me ganaste!! :D

Tama
09-06-2004, 17:41:19
si este codigo que vosotros me dais lo aplicaramos a una tabla de 4.000.000 de registros, ¿no tardaria bastante??

supongo que @@IDENTITY es una variable de un procedimiento almacenado del SQL SERVER, por lo que el valor que devuelve no obliga a recorrer toda la tabla.

saludos.

delphi.com.ar
09-06-2004, 17:45:46
Pero esa no es la funcionalidad de @@IDENTITY, fíjate que cuando consultas @@IDENTITY no haces referencia a ninguna tabla, precisamente porque no tiene ninguna relación particular con ninguna tabla. No deja de ser una variable, donde almacena el valor del último autonumérico generado por cualquier tabla.

Saludos!

Tama
09-06-2004, 17:59:28
Tambien he probado con:

select IDENT_CURRENT('posiciones_tbl')
y
select SCOPE_IDENTITY()

y el resultado es el mismo. ¿hay solucion???
Gracias.

guillotmarc
16-06-2004, 11:05:01
Hola.

si este codigo que vosotros me dais lo aplicaramos a una tabla de 4.000.000 de registros, ¿no tardaria bastante??

supongo que @@IDENTITY es una variable de un procedimiento almacenado del SQL SERVER, por lo que el valor que devuelve no obliga a recorrer toda la tabla.

saludos.
En absoluto. Ese campo está indexado (puesto que es la clave primaria). Buscar el mayor elemento en un campo indexado siempre es muy rápido, por más registros que tenga la tabla.

NOTA: Los índices habitualmente són árboles de búsqueda (B-Tree) que són estructuras que permiten localizar un elemento con muy pocos accesos a disco (debido al orden que mantiene la estrctura). De la misma forma, localizar el elemento más grande, también implica muy pocos accesos a disco.

Saludos.

Nose
16-06-2004, 19:05:54
Según la ayuda IDENT_CURRENT sirve para cualquier sesión de una tabla específica y cualquier alcance
y
SCOPE_IDENTITY te podría servir y de hecho yo lo hago, así siempre me funciona, según la ayuda textualmente dice "SCOPE_IDENTITY devuelve el último valor de identidad generado para una tabla en la sesión y el alcance actuales. "

Saludos

delphi.com.ar
16-06-2004, 19:14:30
"SCOPE_IDENTITY devuelve el último valor de identidad generado para una tabla en la sesión y el alcance actuales."
Ojo que habla de la sesión, si otro usuario o vos mismo en otra sesión insertas datos, no te va a traer el último ID de la tabla.