Diferencia entre sesion y ambito

28/02/2006 - 15:11 por Jordi | Informe spam
Hola,
Estoy mirando las propeidades @@IDENTITY, IDENT_CURRENT y SCOPE_IDENTITY.
Pero no lo acabo de comprender, se me escapan los conceptos sesión y
ámbito.

Alguien puede ayudarme

Preguntas similare

Leer las respuestas

#1 Maxi
28/02/2006 - 15:37 | Informe spam
Hola, a ver:

Ambito: Donde estoy ejecutando: por ej, si tengo un Store el ambito es
dentro del Store no fuera de el
Sesion: Es un nivel mas amplio que ambito mirando desde lo particular a lo
general.

Entonces: cuando vos haces @@identity te va a traer el ultimo valor identity
de toda una sesion, si esa sesion ejecutra 3 Sp
(Facturas - Remitos - Cobranzas) en este orde, te traera el de cobranzas por
ser el ultimo identity.

El motor trabaja en simultaneo por eso se recomienda sacar los valores
identity del ambito para estar 100% seguro que son del modulo por ej
Facturas


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Jordi" escribió en el mensaje
news:du1lhc$n7k$
Hola,
Estoy mirando las propeidades @@IDENTITY, IDENT_CURRENT y SCOPE_IDENTITY.
Pero no lo acabo de comprender, se me escapan los conceptos sesión y
ámbito.

Alguien puede ayudarme

Respuesta Responder a este mensaje
#2 Mauro
28/02/2006 - 20:47 | Informe spam
No se cual es el uso que le quieres dar pero por ejemplo, @@identity te
puede servir para cuando insertas una fila y quieres saber cual es su
identity para insertarlo inmediatamnte en una tabla relacionada sin
necesidad de buscarlo. seria algo asi como

INSERT INTO tabla (campos)
VALUES (valores)
UPDATE tablarelacionada
SET idFK = @@identity --este es el id del ultimo row insertado en tabla1
WHERE id=@ID

"Maxi" wrote in message
news:
Hola, a ver:

Ambito: Donde estoy ejecutando: por ej, si tengo un Store el ambito es
dentro del Store no fuera de el
Sesion: Es un nivel mas amplio que ambito mirando desde lo particular a lo
general.

Entonces: cuando vos haces @@identity te va a traer el ultimo valor


identity
de toda una sesion, si esa sesion ejecutra 3 Sp
(Facturas - Remitos - Cobranzas) en este orde, te traera el de cobranzas


por
ser el ultimo identity.

El motor trabaja en simultaneo por eso se recomienda sacar los valores
identity del ambito para estar 100% seguro que son del modulo por ej
Facturas


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Jordi" escribió en el mensaje
news:du1lhc$n7k$
> Hola,
> Estoy mirando las propeidades @@IDENTITY, IDENT_CURRENT y


SCOPE_IDENTITY.
> Pero no lo acabo de comprender, se me escapan los conceptos sesión y
> ámbito.
>
> Alguien puede ayudarme
>


Respuesta Responder a este mensaje
#3 Maxi
28/02/2006 - 21:15 | Informe spam
Ojo mauro con lo que dices, no es aconsejable usar el @@identity porque no
es del ambito y podrias estar levantando un identity distinto.

Lo aconsejable es usar Scope_identity()


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Mauro" escribió en el mensaje
news:enh1X$
No se cual es el uso que le quieres dar pero por ejemplo, @@identity te
puede servir para cuando insertas una fila y quieres saber cual es su
identity para insertarlo inmediatamnte en una tabla relacionada sin
necesidad de buscarlo. seria algo asi como

INSERT INTO tabla (campos)
VALUES (valores)
UPDATE tablarelacionada
SET idFK = @@identity --este es el id del ultimo row insertado en tabla1
WHERE id=@ID

"Maxi" wrote in message
news:
Hola, a ver:

Ambito: Donde estoy ejecutando: por ej, si tengo un Store el ambito es
dentro del Store no fuera de el
Sesion: Es un nivel mas amplio que ambito mirando desde lo particular a
lo
general.

Entonces: cuando vos haces @@identity te va a traer el ultimo valor


identity
de toda una sesion, si esa sesion ejecutra 3 Sp
(Facturas - Remitos - Cobranzas) en este orde, te traera el de cobranzas


por
ser el ultimo identity.

El motor trabaja en simultaneo por eso se recomienda sacar los valores
identity del ambito para estar 100% seguro que son del modulo por ej
Facturas


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Jordi" escribió en el mensaje
news:du1lhc$n7k$
> Hola,
> Estoy mirando las propeidades @@IDENTITY, IDENT_CURRENT y


SCOPE_IDENTITY.
> Pero no lo acabo de comprender, se me escapan los conceptos sesión y
> ámbito.
>
> Alguien puede ayudarme
>






Respuesta Responder a este mensaje
#4 Mauro
28/02/2006 - 22:30 | Informe spam
si, hay que tener cuidado con los scopes cuando se usan triggers, pero si se
sabe que se esta haciendo no hay problema.
de los BOL
For example, you have two tables, T1 and T2, and an INSERT trigger defined
on T1. When a row is inserted to T1, the trigger fires and inserts a row in
T2. This scenario illustrates two scopes: the insert on T1, and the insert
on T2 as a result of the trigger.

Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and
SCOPE_IDENTITY will return different values at the end of an INSERT
statement on T1.

@@IDENTITY will return the last IDENTITY column value inserted across any
scope in the current session, which is the value inserted in T2.

SCOPE_IDENTITY() will return the IDENTITY value inserted in T1

saludos

Mauro

"Maxi" wrote in message
news:
Ojo mauro con lo que dices, no es aconsejable usar el @@identity porque no
es del ambito y podrias estar levantando un identity distinto.

Lo aconsejable es usar Scope_identity()


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Mauro" escribió en el mensaje
news:enh1X$
> No se cual es el uso que le quieres dar pero por ejemplo, @@identity te
> puede servir para cuando insertas una fila y quieres saber cual es su
> identity para insertarlo inmediatamnte en una tabla relacionada sin
> necesidad de buscarlo. seria algo asi como
>
> INSERT INTO tabla (campos)
> VALUES (valores)
> UPDATE tablarelacionada
> SET idFK = @@identity --este es el id del ultimo row insertado en tabla1
> WHERE id=@ID
>
> "Maxi" wrote in message
> news:
>> Hola, a ver:
>>
>> Ambito: Donde estoy ejecutando: por ej, si tengo un Store el ambito es
>> dentro del Store no fuera de el
>> Sesion: Es un nivel mas amplio que ambito mirando desde lo particular a
>> lo
>> general.
>>
>> Entonces: cuando vos haces @@identity te va a traer el ultimo valor
> identity
>> de toda una sesion, si esa sesion ejecutra 3 Sp
>> (Facturas - Remitos - Cobranzas) en este orde, te traera el de


cobranzas
> por
>> ser el ultimo identity.
>>
>> El motor trabaja en simultaneo por eso se recomienda sacar los valores
>> identity del ambito para estar 100% seguro que son del modulo por ej
>> Facturas
>>
>>
>> Salu2
>> Maxi [MVP SQL SERVER]
>> www.sqlgurus.org
>>
>>
>> "Jordi" escribió en el mensaje
>> news:du1lhc$n7k$
>> > Hola,
>> > Estoy mirando las propeidades @@IDENTITY, IDENT_CURRENT y
> SCOPE_IDENTITY.
>> > Pero no lo acabo de comprender, se me escapan los conceptos sesión y
>> > ámbito.
>> >
>> > Alguien puede ayudarme
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
#5 Maxi
01/03/2006 - 13:19 | Informe spam
No coincido con eso, el Scope esta dentro del ambito y el @@identity no, y
eso no tiene nada que ver con los triggers.
Si entre que sucedio el identity y el @@identity se metio otro valor
identity en cualquier tabla entonces estaremos retornando este y no el valor
que pretendiamos, ojo con esto



Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Mauro" escribió en el mensaje
news:
si, hay que tener cuidado con los scopes cuando se usan triggers, pero si
se
sabe que se esta haciendo no hay problema.
de los BOL
For example, you have two tables, T1 and T2, and an INSERT trigger defined
on T1. When a row is inserted to T1, the trigger fires and inserts a row
in
T2. This scenario illustrates two scopes: the insert on T1, and the insert
on T2 as a result of the trigger.

Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and
SCOPE_IDENTITY will return different values at the end of an INSERT
statement on T1.

@@IDENTITY will return the last IDENTITY column value inserted across any
scope in the current session, which is the value inserted in T2.

SCOPE_IDENTITY() will return the IDENTITY value inserted in T1

saludos

Mauro

"Maxi" wrote in message
news:
Ojo mauro con lo que dices, no es aconsejable usar el @@identity porque
no
es del ambito y podrias estar levantando un identity distinto.

Lo aconsejable es usar Scope_identity()


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Mauro" escribió en el mensaje
news:enh1X$
> No se cual es el uso que le quieres dar pero por ejemplo, @@identity te
> puede servir para cuando insertas una fila y quieres saber cual es su
> identity para insertarlo inmediatamnte en una tabla relacionada sin
> necesidad de buscarlo. seria algo asi como
>
> INSERT INTO tabla (campos)
> VALUES (valores)
> UPDATE tablarelacionada
> SET idFK = @@identity --este es el id del ultimo row insertado en
> tabla1
> WHERE id=@ID
>
> "Maxi" wrote in message
> news:
>> Hola, a ver:
>>
>> Ambito: Donde estoy ejecutando: por ej, si tengo un Store el ambito es
>> dentro del Store no fuera de el
>> Sesion: Es un nivel mas amplio que ambito mirando desde lo particular
>> a
>> lo
>> general.
>>
>> Entonces: cuando vos haces @@identity te va a traer el ultimo valor
> identity
>> de toda una sesion, si esa sesion ejecutra 3 Sp
>> (Facturas - Remitos - Cobranzas) en este orde, te traera el de


cobranzas
> por
>> ser el ultimo identity.
>>
>> El motor trabaja en simultaneo por eso se recomienda sacar los valores
>> identity del ambito para estar 100% seguro que son del modulo por ej
>> Facturas
>>
>>
>> Salu2
>> Maxi [MVP SQL SERVER]
>> www.sqlgurus.org
>>
>>
>> "Jordi" escribió en el mensaje
>> news:du1lhc$n7k$
>> > Hola,
>> > Estoy mirando las propeidades @@IDENTITY, IDENT_CURRENT y
> SCOPE_IDENTITY.
>> > Pero no lo acabo de comprender, se me escapan los conceptos sesión
>> > y
>> > ámbito.
>> >
>> > Alguien puede ayudarme
>> >
>>
>>
>
>






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