Campo Autonumérico

15/05/2004 - 11:26 por José Fernández | Informe spam
Amigos, necesito saber despues de insertar un registro en una base de datos
SQL Server 2000 utilizando ADO, que valor me ha dado a ese campo
autonumérico.

He estado probando

Registros.Open "SELECT SCOPE_IDENTITY() AS 'CampoNuevo'
Msgbox "Valor devuelto" & Registros.Fields("CampoNuevo")

Y siempre me devuelve nulo.

Previamente hago un INSERT y eso me lo hace perfectamente.

Si alguien me puede ayudar o me puede decir que hago mal, se lo agradecería.

Gracias.

Preguntas similare

Leer las respuestas

#1 Marcelo W. Lopez Cremona
15/05/2004 - 14:17 | Informe spam
Hola, la función scopy_identity te retorna el identity cdo lo hiciste en el
mismo enlace, debido a que usas dos instrucciones separadas, sql te devuelve
el identity de la sesion la cual es solo la instrucción (SELECT
scopy_identity()), esto funcionaría en un entorno de lotes de datos o un
procedimiento almacenada.
Te recomiendo que uses ident_current('nombre_tabla'), esto si te retornará
lo que deseas.

Suerte.
;-)

Marcelo W. Lopez
Tucumán - Argentina


"José Fernández" escribió en el mensaje
news:
Amigos, necesito saber despues de insertar un registro en una base de


datos
SQL Server 2000 utilizando ADO, que valor me ha dado a ese campo
autonumérico.

He estado probando

Registros.Open "SELECT SCOPE_IDENTITY() AS 'CampoNuevo'
Msgbox "Valor devuelto" & Registros.Fields("CampoNuevo")

Y siempre me devuelve nulo.

Previamente hago un INSERT y eso me lo hace perfectamente.

Si alguien me puede ayudar o me puede decir que hago mal, se lo


agradecería.

Gracias.


Respuesta Responder a este mensaje
#2 Miguel Egea
15/05/2004 - 17:08 | Informe spam
¡No!, ident_current, no funciona si otro usuario inserta enmedio te dará la
clave del otro usuario
Lo que tienes que hacer es en el mismo bacth meter ambas instrucciones, así
funcionará estupendamente.

Saludos
Miguel Egea



"Marcelo W. Lopez Cremona" escribió en el mensaje
news:#
Hola, la función scopy_identity te retorna el identity cdo lo hiciste en


el
mismo enlace, debido a que usas dos instrucciones separadas, sql te


devuelve
el identity de la sesion la cual es solo la instrucción (SELECT
scopy_identity()), esto funcionaría en un entorno de lotes de datos o un
procedimiento almacenada.
Te recomiendo que uses ident_current('nombre_tabla'), esto si te retornará
lo que deseas.

Suerte.
;-)

Marcelo W. Lopez
Tucumán - Argentina


"José Fernández" escribió en el mensaje
news:
> Amigos, necesito saber despues de insertar un registro en una base de
datos
> SQL Server 2000 utilizando ADO, que valor me ha dado a ese campo
> autonumérico.
>
> He estado probando
>
> Registros.Open "SELECT SCOPE_IDENTITY() AS 'CampoNuevo'
> Msgbox "Valor devuelto" & Registros.Fields("CampoNuevo")
>
> Y siempre me devuelve nulo.
>
> Previamente hago un INSERT y eso me lo hace perfectamente.
>
> Si alguien me puede ayudar o me puede decir que hago mal, se lo
agradecería.
>
> Gracias.
>
>


Respuesta Responder a este mensaje
#3 Maxi
15/05/2004 - 17:28 | Informe spam
Hola, primero antes que nada ese valor identity no deberia ni importar, los
campos identitys NO deberian usarlos para definir claves hacia el cliente,
sino como claves internas a tu sistema.

Podria leerte este articulo del amigo Carlos Sacristan donde explica muy
bien y profesional este tema.

http://www.configuracionesintegrale...p?articulo!9

Bien, ahora vamos a tu pregunta :-), las opciones que tenes son las
siguientes: (sacado de tus BOL)

IDENT_CURRENT
Devuelve el último valor de identidad generado para una tabla especificada
en cualquier sesión y cualquier alcance.



SCOPE_IDENTITY
Devuelve el último valor IDENTITY insertado en una columna IDENTITY en el
mismo alcance. Un alcance es un módulo (un procedimiento almacenado,
desencadenador, función o lote). Por tanto, dos instrucciones están en el
mismo alcance si se encuentran en el mismo procedimiento almacenado, función
o lote.



@@Identity


=
Suerte


Salu2

Maxi

Desarrollador 3 estrellas .NET
Buenos Aires - Argentina

MSN:

"José Fernández" escribió en el mensaje
news:
Amigos, necesito saber despues de insertar un registro en una base de


datos
SQL Server 2000 utilizando ADO, que valor me ha dado a ese campo
autonumérico.

He estado probando

Registros.Open "SELECT SCOPE_IDENTITY() AS 'CampoNuevo'
Msgbox "Valor devuelto" & Registros.Fields("CampoNuevo")

Y siempre me devuelve nulo.

Previamente hago un INSERT y eso me lo hace perfectamente.

Si alguien me puede ayudar o me puede decir que hago mal, se lo


agradecería.

Gracias.


Respuesta Responder a este mensaje
#4 Marcelo W. Lopez Cremona
17/05/2004 - 13:46 | Informe spam
Sustraido de la ayuda de sql Server 2k.

Devuelve el último valor de identidad generado para una tabla especificada
en cualquier sesión y cualquier alcance


Saludos
Marcelo W. López
Tucumán-Argentina
"Miguel Egea" escribió en el mensaje
news:
¡No!, ident_current, no funciona si otro usuario inserta enmedio te dará


la
clave del otro usuario
Lo que tienes que hacer es en el mismo bacth meter ambas instrucciones,


así
funcionará estupendamente.

Saludos
Miguel Egea



"Marcelo W. Lopez Cremona" escribió en el


mensaje
news:#
> Hola, la función scopy_identity te retorna el identity cdo lo hiciste en
el
> mismo enlace, debido a que usas dos instrucciones separadas, sql te
devuelve
> el identity de la sesion la cual es solo la instrucción (SELECT
> scopy_identity()), esto funcionaría en un entorno de lotes de datos o un
> procedimiento almacenada.
> Te recomiendo que uses ident_current('nombre_tabla'), esto si te


retornará
> lo que deseas.
>
> Suerte.
> ;-)
>
> Marcelo W. Lopez
> Tucumán - Argentina
>
>
> "José Fernández" escribió en el mensaje
> news:
> > Amigos, necesito saber despues de insertar un registro en una base de
> datos
> > SQL Server 2000 utilizando ADO, que valor me ha dado a ese campo
> > autonumérico.
> >
> > He estado probando
> >
> > Registros.Open "SELECT SCOPE_IDENTITY() AS 'CampoNuevo'
> > Msgbox "Valor devuelto" & Registros.Fields("CampoNuevo")
> >
> > Y siempre me devuelve nulo.
> >
> > Previamente hago un INSERT y eso me lo hace perfectamente.
> >
> > Si alguien me puede ayudar o me puede decir que hago mal, se lo
> agradecería.
> >
> > Gracias.
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Javier Loria
17/05/2004 - 15:41 | Informe spam
Hola Marcelo:
Exacto, lo que significa que da el ultimo valor aun cuando otro usuario
o sesion agregen una linea. :(
Si la estacion A agrega un linea y se le asigna el numero 2, y casi
simultaneamente la estacion B agrega otra linea se le asigna 3. Si corres
ident_current en la estacion A reportara el 3, con lo cual puede inducir a
serios errores de integridad :(
La tecnica del scopy_identity sirve siempre y cuando sea en el mismo
lote de instrucciones. Si no es posible hacer esto, entonces puede hacerse
un SELECT poniendo en el WHERE la llave primaria natural. Esto se hace
tambien cuando se requieren varias filas.

Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Marcelo W. Lopez Cremona escribio:
Sustraido de la ayuda de sql Server 2k.

Devuelve el último valor de identidad generado para una tabla
especificada en cualquier sesión y cualquier alcance


Saludos
Marcelo W. López
Tucumán-Argentina
"Miguel Egea" escribió en el
mensaje news:
¡No!, ident_current, no funciona si otro usuario inserta enmedio te
dará la clave del otro usuario
Lo que tienes que hacer es en el mismo bacth meter ambas
instrucciones, así funcionará estupendamente.

Saludos
Miguel Egea



"Marcelo W. Lopez Cremona" escribió en el
mensaje news:#
Hola, la función scopy_identity te retorna el identity cdo lo
hiciste en el mismo enlace, debido a que usas dos instrucciones
separadas, sql te devuelve el identity de la sesion la cual es solo
la instrucción (SELECT scopy_identity()), esto funcionaría en un
entorno de lotes de datos o un procedimiento almacenada.
Te recomiendo que uses ident_current('nombre_tabla'), esto si te
retornará lo que deseas.

Suerte.
;-)

Marcelo W. Lopez
Tucumán - Argentina


"José Fernández" escribió en el mensaje
news:
Amigos, necesito saber despues de insertar un registro en una base
de datos SQL Server 2000 utilizando ADO, que valor me ha dado a
ese campo autonumérico.

He estado probando

Registros.Open "SELECT SCOPE_IDENTITY() AS 'CampoNuevo'
Msgbox "Valor devuelto" & Registros.Fields("CampoNuevo")

Y siempre me devuelve nulo.

Previamente hago un INSERT y eso me lo hace perfectamente.

Si alguien me puede ayudar o me puede decir que hago mal, se lo
agradecería.

Gracias.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida