id automaticos

11/01/2005 - 14:01 por Luis Ormeño | Informe spam
Hola a todos

Dentro de un sp cuando se realiza un insert a una tabla q tiene un campo id
automatico, es posible optener ese numero en ese momento; yo opto por
realizar un max del campo en el mismo sp, ya q debo retornar este valor al
programa del cliente. pero hay otra manera?

Luis Ormeño
Lima - Peru

Preguntas similare

Leer las respuestas

#6 Paulino Padial
11/01/2005 - 18:02 | Informe spam
ummm hombre, yo estoy probando de esta forma, y es como yo digo. Mira, haz
lo siguiente, abre el query analizer

y pon esto,
create table escope
(
id int identity(1,1)
)

ahora pulsa control + o y conectas otra vez... ahora tienes dos ventas, ( es
decir dos conexiones distintas ).

escribe esto en las dos ventanas:
insert into escope default values
select @@identity
y ejecuta un par de veces en una , y un par en otra, veras que sigue por
donde iva... usea, que si en el momento de recuperar el @@identity la otra
conexion inserta... te daria mal el identity...

__________________________________________

Paulino Padial López
Murcia - España

Microsoft SQL-Server Administrator.
Microsoft Certified Solution Developer
Microsoft Certified Trainer
Oracle Certified Asociate
__________________________________________
"Manuel Vera" escribió en el mensaje
news:uZMlIn$
Paulino...

Yo tenía entendido que el @@identity era exclusivo de la sesión activa. Es
decir, que el ultimo valor que trae es del usuario propietario de la
conexión actual, impidiendo de esta forma que haya problemas de integridad


o
conistencia.
Por favor, corrígeme si me equivoco.

Salu2
MV

"Paulino Padial" wrote in message
news:eHVbO3%
> @@identity, tienen algunos problemas, porque guarda el ultimo valor,
> insertado.. entonces, si alguien a la vez insertapodrias pillar su
valor...
>
> __________________________________________
>
> Paulino Padial López
> Murcia - España
>
> Microsoft SQL-Server Administrator.
> Microsoft Certified Solution Developer
> Microsoft Certified Trainer
> Oracle Certified Asociate
> __________________________________________
> "Luis Ormeño" escribió en el mensaje
> news:
> > Hola a todos
> >
> > Dentro de un sp cuando se realiza un insert a una tabla q tiene un


campo
> id
> > automatico, es posible optener ese numero en ese momento; yo opto por
> > realizar un max del campo en el mismo sp, ya q debo retornar este


valor
al
> > programa del cliente. pero hay otra manera?
> >
> > Luis Ormeño
> > Lima - Peru
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Paulino Padial
11/01/2005 - 18:16 | Informe spam
es mas, en los bol dice:
Si la instrucción activa uno o más desencadenadores que realizan inserciones
que, a su vez, generan valores de identidad, al invocar @@IDENTITY
inmediatamente después de la instrucción se obtiene el último valor de
identidad generado por los desencadenadores.
usea que si hago un insert, y un trigger inserta tb en la tabla, ( algo raro
xD) me daria el del trigger, asi mira,
agregando a mi ejemplo anterior hago esto

create trigger escopetg on escope
after insert
as
insert into escope default values

y ahora ejecuto esto
insert into escope default values
select @@identity
usea, que no me esta dando el que yo keria, que podria ser insertar un
usuario! :P eso es muy logico, pero lo que kiero decir que no es totalmente,
efectivo, en algunos casos :S

__________________________________________

Paulino Padial López
Murcia - España

Microsoft SQL-Server Administrator.
Microsoft Certified Solution Developer
Microsoft Certified Trainer
Oracle Certified Asociate
__________________________________________
"Manuel Vera" escribió en el mensaje
news:uZMlIn$
Paulino...

Yo tenía entendido que el @@identity era exclusivo de la sesión activa. Es
decir, que el ultimo valor que trae es del usuario propietario de la
conexión actual, impidiendo de esta forma que haya problemas de integridad


o
conistencia.
Por favor, corrígeme si me equivoco.

Salu2
MV

"Paulino Padial" wrote in message
news:eHVbO3%
> @@identity, tienen algunos problemas, porque guarda el ultimo valor,
> insertado.. entonces, si alguien a la vez insertapodrias pillar su
valor...
>
> __________________________________________
>
> Paulino Padial López
> Murcia - España
>
> Microsoft SQL-Server Administrator.
> Microsoft Certified Solution Developer
> Microsoft Certified Trainer
> Oracle Certified Asociate
> __________________________________________
> "Luis Ormeño" escribió en el mensaje
> news:
> > Hola a todos
> >
> > Dentro de un sp cuando se realiza un insert a una tabla q tiene un


campo
> id
> > automatico, es posible optener ese numero en ese momento; yo opto por
> > realizar un max del campo en el mismo sp, ya q debo retornar este


valor
al
> > programa del cliente. pero hay otra manera?
> >
> > Luis Ormeño
> > Lima - Peru
> >
> >
>
>


Respuesta Responder a este mensaje
#8 Salvador Ramos
11/01/2005 - 19:11 | Informe spam
Si, es de SQL 2000, en 7.0 sólo tienes @@identity

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Manuel Vera" escribió en el mensaje
news:e0R6Hn$
Ulises
¿esa función es de SQLServer 2000? Yo tengo el 7.0 y no lo veo en el Books
On Line.
MV


"ulises" wrote in message
news:1d3401c4f7de$ee1747c0$
Usa SCOPE_IDENTITY, te retorna el último número identity
generado.

Saludos también desde Lima :)
Ulises

Hola a todos

Dentro de un sp cuando se realiza un insert a una tabla q


tiene un campo id
automatico, es posible optener ese numero en ese momento;


yo opto por
realizar un max del campo en el mismo sp, ya q debo


retornar este valor al
programa del cliente. pero hay otra manera?

Luis Ormeño
Lima - Peru


.





Respuesta Responder a este mensaje
#9 ulises
11/01/2005 - 19:34 | Informe spam
Hay un error en esa afirmación, si no hay invocación de
desencadenadores en la inserción tampoco habría diferencias
entre usar @@identity y scope_identity().

Usando tu mismo ejemplo, si abres dos conexiones y en una
de ellas colocas :

insert into escope default values
waitfor delay '00:00:10'
select @@identity

y mientras está esperando en la otra conexión usas :

insert into escope default values
select @@identity

verás que los valores de identity son correctos.

Saludos,
Ulises

...

escribe esto en las dos ventanas:
insert into escope default values
select @@identity
y ejecuta un par de veces en una , y un par en otra, veras


que sigue por
donde iva... usea, que si en el momento de recuperar el


@@identity la otra
conexion inserta... te daria mal el identity...



...
Respuesta Responder a este mensaje
#10 Paulino Padial
12/01/2005 - 11:15 | Informe spam
ya , me di cuenta, pero lo del trigger lo probe luego :) gracias

__________________________________________

Paulino Padial López
Murcia - España

Microsoft SQL-Server Administrator.
Microsoft Certified Solution Developer
Microsoft Certified Trainer
Oracle Certified Asociate
__________________________________________
"ulises" escribió en el mensaje
news:1f7501c4f80c$28995550$
Hay un error en esa afirmación, si no hay invocación de
desencadenadores en la inserción tampoco habría diferencias
entre usar @@identity y scope_identity().

Usando tu mismo ejemplo, si abres dos conexiones y en una
de ellas colocas :

insert into escope default values
waitfor delay '00:00:10'
select @@identity

y mientras está esperando en la otra conexión usas :

insert into escope default values
select @@identity

verás que los valores de identity son correctos.

Saludos,
Ulises

...

escribe esto en las dos ventanas:
insert into escope default values
select @@identity
y ejecuta un par de veces en una , y un par en otra, veras


que sigue por
donde iva... usea, que si en el momento de recuperar el


@@identity la otra
conexion inserta... te daria mal el identity...



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