Ver Mensaje Individual
  #4 (permalink)  
Antiguo 30/09/2005, 14:06
Avatar de Mithrandir
Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Igual, simplemente lo almacenas en una variable temporal:

DECLARE @jeje INT
INSERT... (normal)
SET @jeje = SCOPE_IDENTITY()
INSERT INTO tabla (campo1,...) values ( @jeje,...)
INSERT INTO otratabla (campo1,...) values ( @jeje,...)
...

Sobre el porque es "inseguro", te cito lo que viene en la ayuda, en resumidas cuentas, el @@identity puede verse alterado por triggers o funciones corriendo por debajo:
Cita:
Iniciado por BOL
SCOPE_IDENTITY and @@IDENTITY will return last identity values generated in any table in the current session. However, SCOPE_IDENTITY returns values inserted only within the current scope; @@IDENTITY is not limited to a specific scope.

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, which was the last INSERT that occurred in the same scope. The SCOPE_IDENTITY() function will return the NULL value if the function is invoked before any insert statements into an identity column occur in the scope.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche