autonumericos

16/02/2004 - 17:40 por Giox | Informe spam
Hola Lista,
tengo un .asp que hace un insert la tabla a la cual hace referencia el
insert tiene un autonumerico, cual seria la forma mas rapida de saber cual
es el valor del autonumerico que se inserto??

yo lo hacia cuando trabajaba el metodo addNew, pero tengo la duda si hay
otra(s) formas


mil gracias

Preguntas similare

Leer las respuestas

#6 Giox
16/02/2004 - 20:47 | Informe spam
Matias
me podrias dar una luz como seria en un SP?
gracias

"Matias Iacono" escribió en el mensaje
news:
Si... es correcto... si hay dos personas... de la forma como lo estan
planteando te dara el ultimo insertado y no el correcto...

En cambio, en un SP, todo lo que se haga ahi, es un solo hilo, por ende,


te
retornara ese ID, por mas que hubiera habido mas intersiones.

Saludos

"urko" escribió en el mensaje
news:
> hola
> Lo que me gustaria saber es si
> hay dos personas utilizando el sistema de altas de empleados,en este


caso.
> Set rst = Conn.Execute("select @@identity as ID")
> puede darte el ID equivocado al haber insertado en la BD
> justo en el mismo instante.
> o se ejecuta para cada conexion.
> es seguro este sistema?
>
> Por eso yo utilizo el sistema que digo mas abajo,para asegurarme.
>
>
> saludos
> urko
>
>
>
> "Giox" escribió en el mensaje
> news:#
> > ok, gracias
> > lo hice asi
> >
> > strSQL = "INSERT INTO EMPLEADO (NOMBRE, APELLIDO) VALUES
> > ('NOMBRE','APELLIDOS')"
> > Conn.Execute(strSQL)
> >
> > LUEGO
> >
> > Set rst = Conn.Execute("select @@identity as ID")
> > intId = rst("ID")
> >
> > sALUDOS gIOX
> >
> > "urko" escribió en el mensaje
> > news:
> > > te respondo con lo que dijeron varios foreros por aqui contestando


a
> > Jonas
> > > que pregunto lo mismo
> > > por Matias Iacono
> > > Si trabajas con SQL Server, puedes crear un procedimiento almacenado


y
> > usar
> > > la variable @@Identity (Si no mal recuerdo)
> > >
> > > Esta te retorna el valor del autonumerico.
> > >
> > > En el caso de que no tengas un SP, lo que deberias hacer es otra
> consulta
> > y
> > > seleccionar el ultimo registro creado.
> > >
> > > Saludos
> > >
> > >
> > > por Juan C. Barreiro
> > > Id del dato ingresado se hace lo siguiente
> > > (valido para Access y SQLServer).
> > >
> > > Set RS = Server.CreateObject("ADODB.Recordset")
> > > RS.open "Select * From tbl_laquetoque Where 1 = 2;", Conexion, 1,


3
> > > RS.AddNew
> > > '' metes los campos que deben ir, ej:
> > > RS("campodb") = Request.Form("campoform")
> > > RS.Update
> > > IDrecuperado = RS("Id")
> > > RS.Close
> > > Set RS = Nothing
> > >
> > > Donde IDrecuperado es el Id que se ha generado cuando se realizo la
> > > transacción y suponiendo que Id es el campo autonumerico de la


tabla.
> > > Un saludo a todos.
> > > Juan C. Barreiro
> > >
> > > una opcion que puse yo
> > > bueno
> > > yo lo que suelo hacer es generar una cadena aleatoria
> > > y cuando inserto el registro en el campo nombre por ejemplo meter la
> > cadena
> > > y luego hacer una select de ese registro where nombre='"&cadena&"'
> > > idusuario=...
> > > luego solo tendrias que hacer el update para poner el nombre


correcto
> > >
> > > un poco no complicado, mas bien rollo.
> > > con identity lo probe en sql y funcionaba bien, aunque asi me


aseguro.
> > >
> > > saludos
> > > urko
> > >
> > > por Jhonny Vargas
> > > En caso de Access (ya que Matias Iacono te dio la respuesta para
SQL
> > > Server)
> > > Puedes consultar por el último registro ingresado a la tabla, según
los
> > > campos indices.
> > >
> > > Select Top 1 ID From tabla Where Codigo = '001' And Fecha > '15/12/2003'
> > > Orde By ID DESC
> > >
> > > Es importante consultar por los campos indices de la tabla, ya que


si
no
> > se
> > > realiza, un usuario puede insertar un registro al mismo tiempo, lo


que
> te
> > > daria otro identity o autonumerico.
> > >
> > > Saludos,
> > > Jhonny Vargas P.
> > >
> > > Y Benjamin Porter precisando lo comentado arriba
> > > Una precisión: La verdad es que más que TOP 1 ID, sugiero MAX(ID),
> puesto
> > > que el campo clave es autonumérico incremental y te aseguras traer


el
> > ultimo
> > > valor almacenado que cumpla con ese requerimiento...
> > >
> > >
> > >
> > > Diferentes formas para llegar al mismo punto.
> > >
> > > urko
> > >
> > > "Giox" escribió en el mensaje
> > > news:
> > > > Hola Lista,
> > > > tengo un .asp que hace un insert la tabla a la cual hace


referencia
el
> > > > insert tiene un autonumerico, cual seria la forma mas rapida de
saber
> > cual
> > > > es el valor del autonumerico que se inserto??
> > > >
> > > > yo lo hacia cuando trabajaba el metodo addNew, pero tengo la duda


si
> hay
> > > > otra(s) formas
> > > >
> > > >
> > > > mil gracias
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Manuel Etcheto
16/02/2004 - 20:59 | Informe spam
Una aclaración Matías
dentro del SP @@identity te devuelve el último
autonumérico pero de todo lo que generaron las
instrucciones, por eso SQL 2000 tiene SCOPE_IDENTITY que
sí te devolverá el id del registro que insertó el SP y eso
sí es completamente seguro.
Me explico más: Supon que el SP hace
INSERT INTO Empleados...
Select @id = @@identity --param de salida

Supon que "alguien" decide un día hacer un trigger sobre
la tabla empleados para guardar en una tabla de auditoría
el usuario que grabó, fecha, lo que fuere, del registro
insertado.
Supon que la tabla de auditoría tiene un autonumérico...
Entonces @@identity te devuelve el id de tablaAuditoría en
lugar del id de tabla Empleados...
SCOPE_IDENTITY te devuelve el último del lote (SP), no del
alcance que pueda tener fuera de sus instrucciones, por
eso es seguro.

Salu2
Manuel





Si... es correcto... si hay dos personas... de la forma


como lo estan
planteando te dara el ultimo insertado y no el correcto...

En cambio, en un SP, todo lo que se haga ahi, es un solo


hilo, por ende, te
retornara ese ID, por mas que hubiera habido mas


intersiones.

Saludos

"urko" escribió en el


mensaje
news:
hola
Lo que me gustaria saber es si
hay dos personas utilizando el sistema de altas de




empleados,en este caso.
Set rst = Conn.Execute("select @@identity as ID")
puede darte el ID equivocado al haber insertado en la




BD
justo en el mismo instante.
o se ejecuta para cada conexion.
es seguro este sistema?

Por eso yo utilizo el sistema que digo mas abajo,para




asegurarme.


saludos
urko



"Giox" escribió en el mensaje
news:#
> ok, gracias
> lo hice asi
>
> strSQL = "INSERT INTO EMPLEADO (NOMBRE, APELLIDO)




VALUES
> ('NOMBRE','APELLIDOS')"
> Conn.Execute(strSQL)
>
> LUEGO
>
> Set rst = Conn.Execute("select @@identity as ID")
> intId = rst("ID")
>
> sALUDOS gIOX
>
> "urko" escribió en




el mensaje
> news:
> > te respondo con lo que dijeron varios foreros por




aqui contestando a
> Jonas
> > que pregunto lo mismo
> > por Matias Iacono
> > Si trabajas con SQL Server, puedes crear un




procedimiento almacenado y
> usar
> > la variable @@Identity (Si no mal recuerdo)
> >
> > Esta te retorna el valor del autonumerico.
> >
> > En el caso de que no tengas un SP, lo que deberias




hacer es otra
consulta
> y
> > seleccionar el ultimo registro creado.
> >
> > Saludos
> >
> >
> > por Juan C. Barreiro
> > Id del dato ingresado se hace lo siguiente
> > (valido para Access y SQLServer).
> >
> > Set RS = Server.CreateObject("ADODB.Recordset")
> > RS.open "Select * From tbl_laquetoque Where 1 =




2;", Conexion, 1, 3
> > RS.AddNew
> > '' metes los campos que deben ir, ej:
> > RS("campodb") = Request.Form("campoform")
> > RS.Update
> > IDrecuperado = RS("Id")
> > RS.Close
> > Set RS = Nothing
> >
> > Donde IDrecuperado es el Id que se ha generado




cuando se realizo la
> > transacción y suponiendo que Id es el campo




autonumerico de la tabla.
> > Un saludo a todos.
> > Juan C. Barreiro
> >
> > una opcion que puse yo
> > bueno
> > yo lo que suelo hacer es generar una cadena




aleatoria
> > y cuando inserto el registro en el campo nombre por




ejemplo meter la
> cadena
> > y luego hacer una select de ese registro where




nombre='"&cadena&"'
> > idusuario=...
> > luego solo tendrias que hacer el update para poner




el nombre correcto
> >
> > un poco no complicado, mas bien rollo.
> > con identity lo probe en sql y funcionaba bien,




aunque asi me aseguro.
> >
> > saludos
> > urko
> >
> > por Jhonny Vargas
> > En caso de Access (ya que Matias Iacono te dio




la respuesta para
SQL
> > Server)
> > Puedes consultar por el último registro ingresado a




la tabla, según
los
> > campos indices.
> >
> > Select Top 1 ID From tabla Where Codigo = '001' And




Fecha >'15/12/2003'
> > Orde By ID DESC
> >
> > Es importante consultar por los campos indices de




la tabla, ya que si
no
> se
> > realiza, un usuario puede insertar un registro al




mismo tiempo, lo que
te
> > daria otro identity o autonumerico.
> >
> > Saludos,
> > Jhonny Vargas P.
> >
> > Y Benjamin Porter precisando lo comentado arriba
> > Una precisión: La verdad es que más que TOP 1 ID,




sugiero MAX(ID),
puesto
> > que el campo clave es autonumérico incremental y te




aseguras traer el
> ultimo
> > valor almacenado que cumpla con ese requerimiento...
> >
> >
> >
> > Diferentes formas para llegar al mismo punto.
> >
> > urko
> >
> > "Giox" escribió en el mensaje
> > news:
> > > Hola Lista,
> > > tengo un .asp que hace un insert la tabla a la




cual hace referencia
el
> > > insert tiene un autonumerico, cual seria la forma




mas rapida de
saber
> cual
> > > es el valor del autonumerico que se inserto??
> > >
> > > yo lo hacia cuando trabajaba el metodo addNew,




pero tengo la duda si
hay
> > > otra(s) formas
> > >
> > >
> > > mil gracias
> > >
> > >
> >
> >
>
>






.

Respuesta Responder a este mensaje
#8 Matias Iacono
16/02/2004 - 21:17 | Informe spam
Sip... totalmente de acuerdo... :D


"Manuel Etcheto" escribió en el
mensaje news:115e501c3f4c7$6f994210$
Una aclaración Matías
dentro del SP @@identity te devuelve el último
autonumérico pero de todo lo que generaron las
instrucciones, por eso SQL 2000 tiene SCOPE_IDENTITY que
sí te devolverá el id del registro que insertó el SP y eso
sí es completamente seguro.
Me explico más: Supon que el SP hace
INSERT INTO Empleados...
Select @id = @@identity --param de salida

Supon que "alguien" decide un día hacer un trigger sobre
la tabla empleados para guardar en una tabla de auditoría
el usuario que grabó, fecha, lo que fuere, del registro
insertado.
Supon que la tabla de auditoría tiene un autonumérico...
Entonces @@identity te devuelve el id de tablaAuditoría en
lugar del id de tabla Empleados...
SCOPE_IDENTITY te devuelve el último del lote (SP), no del
alcance que pueda tener fuera de sus instrucciones, por
eso es seguro.

Salu2
Manuel





Si... es correcto... si hay dos personas... de la forma


como lo estan
planteando te dara el ultimo insertado y no el correcto...

En cambio, en un SP, todo lo que se haga ahi, es un solo


hilo, por ende, te
retornara ese ID, por mas que hubiera habido mas


intersiones.

Saludos

"urko" escribió en el


mensaje
news:
hola
Lo que me gustaria saber es si
hay dos personas utilizando el sistema de altas de




empleados,en este caso.
Set rst = Conn.Execute("select @@identity as ID")
puede darte el ID equivocado al haber insertado en la




BD
justo en el mismo instante.
o se ejecuta para cada conexion.
es seguro este sistema?

Por eso yo utilizo el sistema que digo mas abajo,para




asegurarme.


saludos
urko



"Giox" escribió en el mensaje
news:#
> ok, gracias
> lo hice asi
>
> strSQL = "INSERT INTO EMPLEADO (NOMBRE, APELLIDO)




VALUES
> ('NOMBRE','APELLIDOS')"
> Conn.Execute(strSQL)
>
> LUEGO
>
> Set rst = Conn.Execute("select @@identity as ID")
> intId = rst("ID")
>
> sALUDOS gIOX
>
> "urko" escribió en




el mensaje
> news:
> > te respondo con lo que dijeron varios foreros por




aqui contestando a
> Jonas
> > que pregunto lo mismo
> > por Matias Iacono
> > Si trabajas con SQL Server, puedes crear un




procedimiento almacenado y
> usar
> > la variable @@Identity (Si no mal recuerdo)
> >
> > Esta te retorna el valor del autonumerico.
> >
> > En el caso de que no tengas un SP, lo que deberias




hacer es otra
consulta
> y
> > seleccionar el ultimo registro creado.
> >
> > Saludos
> >
> >
> > por Juan C. Barreiro
> > Id del dato ingresado se hace lo siguiente
> > (valido para Access y SQLServer).
> >
> > Set RS = Server.CreateObject("ADODB.Recordset")
> > RS.open "Select * From tbl_laquetoque Where 1 2;", Conexion, 1, 3
> > RS.AddNew
> > '' metes los campos que deben ir, ej:
> > RS("campodb") = Request.Form("campoform")
> > RS.Update
> > IDrecuperado = RS("Id")
> > RS.Close
> > Set RS = Nothing
> >
> > Donde IDrecuperado es el Id que se ha generado




cuando se realizo la
> > transacción y suponiendo que Id es el campo




autonumerico de la tabla.
> > Un saludo a todos.
> > Juan C. Barreiro
> >
> > una opcion que puse yo
> > bueno
> > yo lo que suelo hacer es generar una cadena




aleatoria
> > y cuando inserto el registro en el campo nombre por




ejemplo meter la
> cadena
> > y luego hacer una select de ese registro where




nombre='"&cadena&"'
> > idusuario=...
> > luego solo tendrias que hacer el update para poner




el nombre correcto
> >
> > un poco no complicado, mas bien rollo.
> > con identity lo probe en sql y funcionaba bien,




aunque asi me aseguro.
> >
> > saludos
> > urko
> >
> > por Jhonny Vargas
> > En caso de Access (ya que Matias Iacono te dio




la respuesta para
SQL
> > Server)
> > Puedes consultar por el último registro ingresado a




la tabla, según
los
> > campos indices.
> >
> > Select Top 1 ID From tabla Where Codigo = '001' And




Fecha >'15/12/2003'
> > Orde By ID DESC
> >
> > Es importante consultar por los campos indices de




la tabla, ya que si
no
> se
> > realiza, un usuario puede insertar un registro al




mismo tiempo, lo que
te
> > daria otro identity o autonumerico.
> >
> > Saludos,
> > Jhonny Vargas P.
> >
> > Y Benjamin Porter precisando lo comentado arriba
> > Una precisión: La verdad es que más que TOP 1 ID,




sugiero MAX(ID),
puesto
> > que el campo clave es autonumérico incremental y te




aseguras traer el
> ultimo
> > valor almacenado que cumpla con ese requerimiento...
> >
> >
> >
> > Diferentes formas para llegar al mismo punto.
> >
> > urko
> >
> > "Giox" escribió en el mensaje
> > news:
> > > Hola Lista,
> > > tengo un .asp que hace un insert la tabla a la




cual hace referencia
el
> > > insert tiene un autonumerico, cual seria la forma




mas rapida de
saber
> cual
> > > es el valor del autonumerico que se inserto??
> > >
> > > yo lo hacia cuando trabajaba el metodo addNew,




pero tengo la duda si
hay
> > > otra(s) formas
> > >
> > >
> > > mil gracias
> > >
> > >
> >
> >
>
>






.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida