Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2004
Tama Tama is offline
Registrado
 
Registrado: abr 2004
Posts: 9
Poder: 0
Tama Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 09-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
@@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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 09-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Código SQL [-]
SELECT MAX(Campo)
FROM Tabla

EDIT: Maldito!! Me ganaste!!
Responder Con Cita
  #4  
Antiguo 09-06-2004
Tama Tama is offline
Registrado
 
Registrado: abr 2004
Posts: 9
Poder: 0
Tama Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 09-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 09-06-2004
Tama Tama is offline
Registrado
 
Registrado: abr 2004
Posts: 9
Poder: 0
Tama Va por buen camino
Tambien he probado con:

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

y el resultado es el mismo. ¿hay solucion???
Gracias.
Responder Con Cita
  #7  
Antiguo 16-06-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #8  
Antiguo 16-06-2004
Nose Nose is offline
Miembro
 
Registrado: abr 2004
Ubicación: Chile
Posts: 66
Poder: 21
Nose Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 16-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:59:44.


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
Copyright 1996-2007 Club Delphi