Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   como conocer el ultimo valor autonumerico creado de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=11254)

Tama 09-06-2004 17:11:01

como conocer el ultimo valor autonumerico creado de una tabla
 
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:
Código SQL [-]
SELECT MAX(CAMPO)
FROM TABLA

Saludos!

__marcsc 09-06-2004 17:16:25

Código SQL [-]
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.

Cita:

Empezado por Tama
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

Cita:

Empezado por Nose
"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.


La franja horaria es GMT +2. Ahora son las 16:42:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi