Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Recuperar IDENTITY al insertar

666 views
Skip to first unread message

Morris

unread,
Jan 24, 2003, 10:39:49 AM1/24/03
to
Hola a todos,

tenemos una tabla en SQL Server 2000 cuya clave primaria
es un IDENTITY. Hacemos la inserción y queremos saber el
valor del campo IDENTITY

Hay formas de consultar ese valor con
DBCC CHECKIDENT
pero si entre la consulta de ese valor y tu insert se
produce otro insert entonces el valor que tu te llevas no
es el correcto y no queremos BLOQUEAR la tabla ( si se
puede evitar), es decir, que la idea es saber si hay
alguna forma de insertar y obtener el valor en un solo
paso...

Muchas gracias a todos y cualquier idea sera bienvenida,

Morris

Fernando España

unread,
Jan 24, 2003, 10:48:31 AM1/24/03
to
DESPUES JUSTO DESPUES DE LA INSERCION DEL REGISTRO PUEDES ASIGNAR EL VALOR
IDENTITY A UNA VARIABLE, EJEMPLO

DECLARE @IDENTIDAD INT

ACA VA TU INSERT
JUSTO DESPUES
SELECT @IDENTIDAD=@@IDENTITY


--
Fernando España
Gerente Informatica
ATISA
www.atisa.com.gt
"Morris" <morri...@QUITARhotmail.com> escribió en el mensaje
news:038801c2c3be$d4795840$8ef82ecf@TK2MSFTNGXA04...

Morris

unread,
Jan 24, 2003, 10:56:13 AM1/24/03
to
Y no existe posibilidad de que se produjera un insert de
otro usuario justo en medio de mi insert y la consulta al
valor de IDENTITY, se puede hacer esto sin bloquear la
tabla??
seguro q no falla?

perdon por ser tan pesado pero es importante, gracias...


>-----Mensaje original-----

>.
>

Eje

unread,
Jan 24, 2003, 11:09:12 AM1/24/03
to
> Morris

Puedes usar la función SCOPE_IDENTITY, que te devuelve la última identidad
insertada en el alcance actual (módulo, proc. almacenado,...).
@@IDENTITY te devuelve la última identidad generada sin tener en cuenta el
alcance, por lo que podría darse el caso que tú dices.
Haz la prueba, inserta un registro con el analizador de consultas, abre otra
sesión e inserta otro y luego haz un SCOPE_IDENTITY en la primera sesión a
ver qué identidad te devuelve.

Un saludo


Fernando España

unread,
Jan 24, 2003, 11:07:13 AM1/24/03
to

NO FALLA

--
Fernando España
Gerente Informatica
ATISA
www.atisa.com.gt
"Morris" <morri...@QUITARhotmail.com> escribió en el mensaje

news:006801c2c3c1$1eed7c60$d2f82ecf@TK2MSFTNGXA09...

Miguel Egea

unread,
Jan 25, 2003, 9:41:16 AM1/25/03
to

Hola, el caso que dice morris no puede darse con @@identity, aunque convengo
con tigo en que lo mejor es scope_identity, @@identity pertenece al alcance
actual pero si un trigger inserta en otra tabla con autonumérico @@identity
es el del trigger y no el que acabamos de usar.


--
--
Un Saludo
Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.


Miguel Egea

unread,
Jan 25, 2003, 9:40:14 AM1/25/03
to

Llema mucha razón fernando no falla, pero si usas triggers podrías tener
pegas, si es así y tienes sql 2k usa scope_identity en lugar de @@identity y
listo.


--
--
Un Saludo
Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

"Fernando España" <fes...@atisal.com.gt> escribió en el mensaje
news:OMNMHI8wCHA.616@TK2MSFTNGP11...

Fernando España

unread,
Jan 25, 2003, 11:10:54 AM1/25/03
to

Gracias mige, tienes razon, por lo mismo le decia que deberia estar
inmediatamente despues del insert, y si es correcto que si insertas en otra
tabla con autonumerico, @@identity regresara el valor del ultimo identity
afectado.

--
Fernando España
Gerente Informatica
ATISA
www.atisa.com.gt

"Miguel Egea" <migue...@telefonica.net> escribió en el mensaje
news:#u30F$HxCHA.2380@TK2MSFTNGP11...

Morris

unread,
Jan 29, 2003, 4:24:49 AM1/29/03
to

Gracias por la solución, funciona perfectamente, gracias


>-----Mensaje original-----

>.
>

Quim

unread,
Feb 3, 2003, 10:34:08 AM2/3/03
to

Pues yo en los triggers cojo el valor del campo IDENTITY con un "select
'campo_de_identidad' from inserted" y no me ha fallado nunca, aunque no se
si es del todo correcto. Creeis que puede dar algún problema?

Saludos!!

"Morris" <morri...@QUITARhotmail.com> escribió en el mensaje
news:011301c2c778$454507b0$8ef82ecf@TK2MSFTNGXA04...

Miguel Egea

unread,
Feb 3, 2003, 11:05:31 AM2/3/03
to

Si puede darte varios, por ejemplo si inserted tiene más de un registro...

Saludos
Miguel Egea
http://www.portalsql.com

"Quim" <qu...@systemso.com> escribió en el mensaje
news:eaPZol5yCHA.1768@TK2MSFTNGP12...

0 new messages